diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 979b94f84d6..a97457a818b 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -3,9 +3,6 @@ # everything (whole code-base) - Junior Devs * @pagefaultgames/junior-dev-team -# github actions/templates etc. - Dev Leads -/.github @pagefaultgames/senior-dev-team - # Art Team /public/**/*.png @pagefaultgames/art-team /public/**/*.json @pagefaultgames/art-team @@ -19,4 +16,11 @@ /public/audio @pagefaultgames/composer-team # Balance Files; contain actual code logic and must also be owned by dev team -/src/data/balance @pagefaultgames/balance-team @pagefaultgames/junior-dev-team \ No newline at end of file +/src/data/balance @pagefaultgames/balance-team @pagefaultgames/junior-dev-team +/src/data/trainers @pagefaultgames/balance-team @pagefaultgames/junior-dev-team + +# GitHub actions/templates etc. - Senior Devs +# Should be defined last in the file to make sure these always override all other definitions +/.github @pagefaultgames/senior-dev-team +package.json @pagefaultgames/senior-dev-team +pnpm-lock.yaml @pagefaultgames/senior-dev-team \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2d56b868cff..0217ebd28a6 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -81,7 +81,7 @@ For example, here is how you could test a scenario where the player Pokemon has ```typescript const overrides = { ABILITY_OVERRIDE: AbilityId.DROUGHT, - OPP_MOVESET_OVERRIDE: MoveId.WATER_GUN, + ENEMY_MOVESET_OVERRIDE: MoveId.WATER_GUN, } satisfies Partial>; ``` diff --git a/docs/localization.md b/docs/localization.md index 0fe950a361d..c325aaf55a9 100644 --- a/docs/localization.md +++ b/docs/localization.md @@ -90,9 +90,13 @@ If this feature requires new text, the text should be integrated into the code w - For any feature pulled from the mainline Pokémon games (e.g. a Move or Ability implementation), it's best practice to include a source link for any added text. [Poké Corpus](https://abcboy101.github.io/poke-corpus/) is a great resource for finding text from the mainline games; otherwise, a video/picture showing the text being displayed should suffice. - You should also [notify the current Head of Translation](#notifying-translation) to ensure a fast response. -3. At this point, you may begin [testing locales integration in your main PR](#documenting-locales-changes). -4. The Translation Team will approve the locale PR (after corrections, if necessary), then merge it into `pokerogue-locales`. -5. The Dev Team will approve your main PR for your feature, then merge it into PokéRogue's beta environment. +3. Your locales should use the following format: + - File names should be in `kebab-case`. Example: `trainer-names.json` + - Key names should be in `camelCase`. Example: `aceTrainer` + - If you make use of i18next's inbuilt [context support](https://www.i18next.com/translation-function/context), you need to use `snake_case` for the context key. Example: `aceTrainer_male` +4. At this point, you may begin [testing locales integration in your main PR](#documenting-locales-changes). +5. The Translation Team will approve the locale PR (after corrections, if necessary), then merge it into `pokerogue-locales`. +6. The Dev Team will approve your main PR for your feature, then merge it into PokéRogue's beta environment. [^2]: For those wondering, the reason for choosing English specifically is due to it being the master language set in Pontoon (the program used by the Translation Team to perform locale updates). If a key is present in any language _except_ the master language, it won't appear anywhere else in the translation tool, rendering missing English keys quite a hassle. diff --git a/package.json b/package.json index 9c0ee8a43cc..d26c3da6150 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "devDependencies": { "@biomejs/biome": "2.0.0", "@ls-lint/ls-lint": "2.3.1", + "@types/crypto-js": "^4.2.0", "@types/jsdom": "^21.1.7", "@types/node": "^22.16.5", "@vitest/coverage-istanbul": "^3.2.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 900be6fd76e..c3b58a60f48 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -48,6 +48,9 @@ importers: '@ls-lint/ls-lint': specifier: 2.3.1 version: 2.3.1 + '@types/crypto-js': + specifier: ^4.2.0 + version: 4.2.2 '@types/jsdom': specifier: ^21.1.7 version: 21.1.7 @@ -718,6 +721,9 @@ packages: '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + '@types/crypto-js@4.2.2': + resolution: {integrity: sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ==} + '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} @@ -2525,6 +2531,8 @@ snapshots: '@types/cookie@0.6.0': {} + '@types/crypto-js@4.2.2': {} + '@types/deep-eql@4.0.2': {} '@types/estree@1.0.8': {} diff --git a/public/audio/bgm/desert.mp3 b/public/audio/bgm/desert.mp3 index febbacc0100..10938f814fe 100644 Binary files a/public/audio/bgm/desert.mp3 and b/public/audio/bgm/desert.mp3 differ diff --git a/public/audio/bgm/fairy_cave.mp3 b/public/audio/bgm/fairy_cave.mp3 index 4e1c9ea0eb4..32cc3dbaa41 100644 Binary files a/public/audio/bgm/fairy_cave.mp3 and b/public/audio/bgm/fairy_cave.mp3 differ diff --git a/public/exp-sprites.json b/public/exp-sprites.json index 1903a6c7804..21c89276127 100644 --- a/public/exp-sprites.json +++ b/public/exp-sprites.json @@ -525,10 +525,6 @@ "767", "768", "768", - "769", - "769", - "770", - "770", "771", "771", "772", @@ -751,10 +747,6 @@ "841", "842", "842", - "843", - "843", - "844", - "844", "845-gorging", "845-gorging", "845-gulping", @@ -893,10 +885,6 @@ "900", "901", "901", - "902-female", - "902-female", - "902", - "902", "903", "903", "904", @@ -1641,10 +1629,6 @@ "767b", "768b", "768b", - "769b", - "769b", - "770b", - "770b", "771b", "771b", "772b", @@ -1867,10 +1851,6 @@ "841b", "842b", "842b", - "843b", - "843b", - "844b", - "844b", "845b-gorging", "845b-gorging", "845b-gulping", @@ -2009,10 +1989,6 @@ "900b", "901b", "901b", - "902b-female", - "902b-female", - "902b", - "902b", "903b", "903b", "904b", @@ -2757,10 +2733,6 @@ "767sb", "768sb", "768sb", - "769sb", - "769sb", - "770sb", - "770sb", "771sb", "771sb", "772sb", @@ -2983,10 +2955,6 @@ "841sb", "842sb", "842sb", - "843sb", - "843sb", - "844sb", - "844sb", "845sb-gorging", "845sb-gorging", "845sb-gulping", @@ -3125,10 +3093,6 @@ "900sb", "901sb", "901sb", - "902sb-female", - "902sb-female", - "902sb", - "902sb", "903sb", "903sb", "904sb", @@ -3878,10 +3842,6 @@ "767s", "768s", "768s", - "769s", - "769s", - "770s", - "770s", "771s", "771s", "772s", @@ -4104,10 +4064,6 @@ "841s", "842s", "842s", - "843s", - "843s", - "844s", - "844s", "845s-gorging", "845s-gorging", "845s-gulping", @@ -4246,10 +4202,6 @@ "900s", "901s", "901s", - "902s-female", - "902s-female", - "902s", - "902s", "903s", "903s", "904s", diff --git a/public/images/logo_fake.png b/public/images/logo_fake.png new file mode 100755 index 00000000000..9fdb8724025 Binary files /dev/null and b/public/images/logo_fake.png differ diff --git a/public/images/pokemon/550-white-striped.json b/public/images/pokemon/550-white-striped.json index eb963db2d29..f667f112133 100644 --- a/public/images/pokemon/550-white-striped.json +++ b/public/images/pokemon/550-white-striped.json @@ -1,41 +1,810 @@ -{ - "textures": [ - { - "image": "550-white-striped.png", - "format": "RGBA8888", - "size": { - "w": 38, - "h": 38 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 38, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 35 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:19e55d3270c43844570910aed8f3eef6:683644c43d593c0354648cc542f0c330:f97864a794849ea9866466461e0e9a7f$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 37, "y": 102, "w": 37, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 37, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 111, "y": 102, "w": 36, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 36, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 219, "y": 102, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 3, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 199, "y": 170, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 166, "y": 170, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 133, "y": 170, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 100, "y": 170, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 67, "y": 170, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 34, "y": 170, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 3, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 0, "y": 170, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 34, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 36, "y": 136, "w": 35, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 35, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 0, "y": 136, "w": 36, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 36, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 183, "y": 102, "w": 36, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 36, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 147, "y": 102, "w": 36, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 36, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 153, "y": 68, "w": 38, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 38, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 68, "w": 39, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 3, "w": 39, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 123, "y": 0, "w": 40, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 40, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 42, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 42, "y": 0, "w": 41, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 41, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 83, "y": 0, "w": 40, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 40, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 195, "y": 34, "w": 39, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 3, "w": 39, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 156, "y": 34, "w": 39, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 39, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 117, "y": 34, "w": 39, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 39, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 115, "y": 68, "w": 38, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 38, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 37, "y": 102, "w": 37, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 37, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 111, "y": 102, "w": 36, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 36, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 219, "y": 102, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 3, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 199, "y": 170, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 166, "y": 170, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 133, "y": 170, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 100, "y": 170, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 67, "y": 170, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 34, "y": 170, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 3, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 0, "y": 170, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 34, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 36, "y": 136, "w": 35, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 35, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 0, "y": 136, "w": 36, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 36, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 183, "y": 102, "w": 36, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 36, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 147, "y": 102, "w": 36, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 36, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 153, "y": 68, "w": 38, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 38, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 0, "y": 68, "w": 39, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 3, "w": 39, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 123, "y": 0, "w": 40, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 40, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 42, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 42, "y": 0, "w": 41, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 41, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 83, "y": 0, "w": 40, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 40, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 195, "y": 34, "w": 39, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 3, "w": 39, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 156, "y": 34, "w": 39, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 39, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 117, "y": 34, "w": 39, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 39, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 115, "y": 68, "w": 38, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 38, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 37, "y": 102, "w": 37, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 37, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 111, "y": 102, "w": 36, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 36, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 219, "y": 102, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 3, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 199, "y": 170, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 166, "y": 170, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 133, "y": 170, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 100, "y": 170, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 67, "y": 170, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 34, "y": 170, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 3, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 0, "y": 170, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 34, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 36, "y": 136, "w": 35, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 35, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 0, "y": 136, "w": 36, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 36, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 183, "y": 102, "w": 36, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 36, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 147, "y": 102, "w": 36, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 36, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 153, "y": 68, "w": 38, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 38, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 0, "y": 68, "w": 39, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 3, "w": 39, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 123, "y": 0, "w": 40, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 40, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 42, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 42, "y": 0, "w": 41, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 41, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 83, "y": 0, "w": 40, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 40, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 195, "y": 34, "w": 39, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 3, "w": 39, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 156, "y": 34, "w": 39, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 39, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 117, "y": 34, "w": 39, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 39, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 115, "y": 68, "w": 38, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 38, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 37, "y": 102, "w": 37, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 37, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 71, "y": 136, "w": 35, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 35, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 78, "y": 34, "w": 39, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 39, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 106, "y": 136, "w": 35, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 2, "w": 35, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 39, "y": 34, "w": 39, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 2, "w": 39, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 141, "y": 136, "w": 35, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 35, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 0, "y": 34, "w": 39, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 39, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 176, "y": 136, "w": 35, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 35, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 202, "y": 0, "w": 39, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 39, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 74, "y": 102, "w": 37, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 37, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 211, "y": 136, "w": 35, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 35, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 191, "y": 68, "w": 37, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 37, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 163, "y": 0, "w": 39, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 39, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 77, "y": 68, "w": 38, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 38, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 39, "y": 68, "w": 38, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 38, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 0, "y": 102, "w": 37, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 1, "w": 37, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "550-white-striped.png", + "format": "I8", + "size": { "w": 252, "h": 204 }, + "scale": "1", + "frameTags": [ + ], + "layers": [ + { "name": "Layer", "opacity": 255, "blendMode": "normal" } + ], + "slices": [ + ] + } } diff --git a/public/images/pokemon/550-white-striped.png b/public/images/pokemon/550-white-striped.png index 3dceb30cddf..a7f4d1c12f6 100644 Binary files a/public/images/pokemon/550-white-striped.png and b/public/images/pokemon/550-white-striped.png differ diff --git a/public/images/pokemon/769.json b/public/images/pokemon/769.json index c425fb49bf9..36284af1640 100644 --- a/public/images/pokemon/769.json +++ b/public/images/pokemon/769.json @@ -1,41 +1,423 @@ -{ - "textures": [ - { - "image": "769.png", - "format": "RGBA8888", - "size": { - "w": 54, - "h": 54 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 54, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 54, - "h": 46 - }, - "frame": { - "x": 0, - "y": 0, - "w": 54, - "h": 46 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:b2e38d3d91d264c48c1ffdd32ab30e76:78adce15d31dd8e3d3a9121d4b745f8c:ba2e5a01352778ce94d84746368de8fc$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 106, "y": 94, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 106, "y": 94, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 59, "y": 0, "w": 54, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 54, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 55, "y": 47, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 108, "y": 47, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 106, "y": 94, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 106, "y": 94, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 59, "y": 0, "w": 54, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 54, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 55, "y": 47, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 108, "y": 47, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 106, "y": 94, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 330 + }, + { + "filename": "0012.png", + "frame": { "x": 106, "y": 94, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0013.png", + "frame": { "x": 59, "y": 0, "w": 54, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 54, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0014.png", + "frame": { "x": 55, "y": 47, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0015.png", + "frame": { "x": 108, "y": 47, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0016.png", + "frame": { "x": 160, "y": 94, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0017.png", + "frame": { "x": 106, "y": 94, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0018.png", + "frame": { "x": 59, "y": 0, "w": 54, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 54, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0019.png", + "frame": { "x": 55, "y": 47, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0020.png", + "frame": { "x": 108, "y": 47, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0021.png", + "frame": { "x": 106, "y": 94, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 330 + }, + { + "filename": "0022.png", + "frame": { "x": 106, "y": 94, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0023.png", + "frame": { "x": 0, "y": 44, "w": 55, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 55, "h": 46 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0024.png", + "frame": { "x": 0, "y": 0, "w": 59, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 59, "h": 44 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0025.png", + "frame": { "x": 0, "y": 141, "w": 63, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 63, "h": 31 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0026.png", + "frame": { "x": 160, "y": 140, "w": 65, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 22, "w": 65, "h": 31 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 770 + }, + { + "filename": "0027.png", + "frame": { "x": 160, "y": 140, "w": 65, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 22, "w": 65, "h": 31 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0028.png", + "frame": { "x": 0, "y": 141, "w": 63, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 63, "h": 31 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0029.png", + "frame": { "x": 0, "y": 0, "w": 59, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 59, "h": 44 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0030.png", + "frame": { "x": 0, "y": 44, "w": 55, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 55, "h": 46 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0031.png", + "frame": { "x": 106, "y": 94, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0032.png", + "frame": { "x": 106, "y": 94, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0033.png", + "frame": { "x": 59, "y": 0, "w": 54, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 54, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0034.png", + "frame": { "x": 55, "y": 47, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0035.png", + "frame": { "x": 108, "y": 47, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0036.png", + "frame": { "x": 106, "y": 94, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 330 + }, + { + "filename": "0037.png", + "frame": { "x": 106, "y": 94, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0038.png", + "frame": { "x": 113, "y": 0, "w": 54, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 54, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0039.png", + "frame": { "x": 161, "y": 47, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0040.png", + "frame": { "x": 0, "y": 90, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0041.png", + "frame": { "x": 106, "y": 140, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0042.png", + "frame": { "x": 106, "y": 140, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0043.png", + "frame": { "x": 167, "y": 0, "w": 54, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 54, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0044.png", + "frame": { "x": 161, "y": 47, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0045.png", + "frame": { "x": 53, "y": 94, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "769.png", + "format": "I8", + "size": { "w": 225, "h": 186 }, + "scale": "1", + "frameTags": [ + ], + "layers": [ + { "name": "Layer", "opacity": 255, "blendMode": "normal" } + ], + "slices": [ + ] + } } diff --git a/public/images/pokemon/769.png b/public/images/pokemon/769.png index 842a0f90b2f..fadd62efceb 100644 Binary files a/public/images/pokemon/769.png and b/public/images/pokemon/769.png differ diff --git a/public/images/pokemon/770.json b/public/images/pokemon/770.json index b5ba601c3e9..2170fc02cbc 100644 --- a/public/images/pokemon/770.json +++ b/public/images/pokemon/770.json @@ -1,41 +1,594 @@ -{ - "textures": [ - { - "image": "770.png", - "format": "RGBA8888", - "size": { - "w": 76, - "h": 76 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 76, - "h": 57 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 57 - }, - "frame": { - "x": 0, - "y": 0, - "w": 76, - "h": 57 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:5b15a844833418603e40a60d823841c9:48f2094c3097b1b222f1ed5ded0948a4:9a5e6a86eb0697afa19bc4a32f422cc1$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 78, "y": 110, "w": 76, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 76, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 160, "y": 55, "w": 78, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 78, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 492, "y": 54, "w": 80, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 80, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 336, "y": 0, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 83, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 0, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 85, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 170, "y": 0, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 83, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 0, "y": 54, "w": 80, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 80, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 336, "y": 54, "w": 78, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 78, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 78, "y": 110, "w": 76, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 76, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 160, "y": 55, "w": 78, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 78, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 492, "y": 54, "w": 80, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 80, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 336, "y": 0, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 83, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0013.png", + "frame": { "x": 0, "y": 0, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 85, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0014.png", + "frame": { "x": 170, "y": 0, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 83, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0015.png", + "frame": { "x": 0, "y": 54, "w": 80, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 80, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0016.png", + "frame": { "x": 336, "y": 54, "w": 78, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 78, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0017.png", + "frame": { "x": 78, "y": 110, "w": 76, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 76, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0018.png", + "frame": { "x": 160, "y": 55, "w": 78, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 78, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0019.png", + "frame": { "x": 492, "y": 54, "w": 80, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 80, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0020.png", + "frame": { "x": 419, "y": 0, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 83, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0021.png", + "frame": { "x": 85, "y": 0, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 85, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0022.png", + "frame": { "x": 253, "y": 0, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 83, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0023.png", + "frame": { "x": 80, "y": 54, "w": 80, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 80, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0024.png", + "frame": { "x": 414, "y": 54, "w": 78, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 78, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0025.png", + "frame": { "x": 154, "y": 111, "w": 76, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 76, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0026.png", + "frame": { "x": 238, "y": 55, "w": 78, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 78, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0027.png", + "frame": { "x": 492, "y": 54, "w": 80, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 80, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0028.png", + "frame": { "x": 336, "y": 0, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 83, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0029.png", + "frame": { "x": 0, "y": 0, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 85, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0030.png", + "frame": { "x": 170, "y": 0, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 83, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0031.png", + "frame": { "x": 0, "y": 54, "w": 80, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 80, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0032.png", + "frame": { "x": 336, "y": 54, "w": 78, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 78, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0033.png", + "frame": { "x": 78, "y": 110, "w": 76, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 76, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0034.png", + "frame": { "x": 160, "y": 55, "w": 78, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 78, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0035.png", + "frame": { "x": 492, "y": 54, "w": 80, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 80, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0036.png", + "frame": { "x": 336, "y": 0, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 83, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0037.png", + "frame": { "x": 0, "y": 0, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 85, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0038.png", + "frame": { "x": 170, "y": 0, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 83, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0039.png", + "frame": { "x": 0, "y": 54, "w": 80, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 80, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0040.png", + "frame": { "x": 336, "y": 54, "w": 78, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 78, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0041.png", + "frame": { "x": 78, "y": 110, "w": 76, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 76, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0042.png", + "frame": { "x": 160, "y": 55, "w": 78, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 78, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0043.png", + "frame": { "x": 492, "y": 54, "w": 80, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 80, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0044.png", + "frame": { "x": 336, "y": 0, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 83, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0045.png", + "frame": { "x": 0, "y": 0, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 85, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0046.png", + "frame": { "x": 170, "y": 0, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 83, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0047.png", + "frame": { "x": 0, "y": 54, "w": 80, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 80, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0048.png", + "frame": { "x": 336, "y": 54, "w": 78, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 78, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0049.png", + "frame": { "x": 78, "y": 110, "w": 76, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 76, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0050.png", + "frame": { "x": 492, "y": 109, "w": 78, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 78, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0051.png", + "frame": { "x": 306, "y": 111, "w": 80, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 4, "w": 80, "h": 53 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0052.png", + "frame": { "x": 306, "y": 164, "w": 83, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 10, "w": 83, "h": 47 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0053.png", + "frame": { "x": 472, "y": 201, "w": 90, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 19, "w": 90, "h": 38 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0054.png", + "frame": { "x": 472, "y": 165, "w": 96, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 21, "w": 96, "h": 36 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 167, "w": 96, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 21, "w": 96, "h": 36 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0056.png", + "frame": { "x": 96, "y": 168, "w": 96, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 21, "w": 96, "h": 36 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0057.png", + "frame": { "x": 192, "y": 168, "w": 96, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 21, "w": 96, "h": 36 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0058.png", + "frame": { "x": 96, "y": 168, "w": 96, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 21, "w": 96, "h": 36 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0059.png", + "frame": { "x": 0, "y": 167, "w": 96, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 21, "w": 96, "h": 36 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0060.png", + "frame": { "x": 0, "y": 203, "w": 90, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 19, "w": 90, "h": 38 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0061.png", + "frame": { "x": 389, "y": 164, "w": 83, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 10, "w": 83, "h": 47 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0062.png", + "frame": { "x": 386, "y": 111, "w": 80, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 4, "w": 80, "h": 53 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0063.png", + "frame": { "x": 0, "y": 110, "w": 78, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 78, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0064.png", + "frame": { "x": 230, "y": 111, "w": 76, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 76, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "770.png", + "format": "I8", + "size": { "w": 572, "h": 241 }, + "scale": "1", + "frameTags": [ + ], + "layers": [ + { "name": "Layer", "opacity": 255, "blendMode": "normal" } + ], + "slices": [ + ] + } } diff --git a/public/images/pokemon/770.png b/public/images/pokemon/770.png index 5b3c508ad16..e83e33e76a6 100644 Binary files a/public/images/pokemon/770.png and b/public/images/pokemon/770.png differ diff --git a/public/images/pokemon/843.json b/public/images/pokemon/843.json index 0e2cf3fbcf3..40f78f893d9 100644 --- a/public/images/pokemon/843.json +++ b/public/images/pokemon/843.json @@ -1,41 +1,648 @@ -{ - "textures": [ - { - "image": "843.png", - "format": "RGBA8888", - "size": { - "w": 42, - "h": 42 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 42, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 42, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 42, - "h": 40 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:6cf06b0cca3e0b39015f8d01dea60f4d:45ff2285e9a9e0b0ab468a91f0519ed8:1ad579f7e215608104284deec571c282$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 165, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 42, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 172, "y": 166, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 42, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 214, "y": 166, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 42, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 256, "y": 166, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 42, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 128, "y": 126, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 43, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 128, "y": 166, "w": 44, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 44, "h": 39 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 86, "y": 86, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 44, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 43, "w": 46, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 46, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 193, "y": 42, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 45, "h": 41 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 130, "y": 86, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 44, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 225, "y": 86, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 44, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 216, "y": 126, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 43, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 42, "y": 128, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 43, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 0, "y": 165, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 42, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 172, "y": 166, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 42, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 214, "y": 166, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 42, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 256, "y": 166, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 42, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 128, "y": 126, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 43, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 128, "y": 166, "w": 44, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 44, "h": 39 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 86, "y": 86, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 44, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 0, "y": 43, "w": 46, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 46, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 193, "y": 42, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 45, "h": 41 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 130, "y": 86, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 44, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 225, "y": 86, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 44, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 216, "y": 126, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 43, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 42, "y": 128, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 43, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 0, "y": 165, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 42, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 172, "y": 166, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 42, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 214, "y": 166, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 42, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 256, "y": 166, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 42, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 128, "y": 126, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 43, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 128, "y": 166, "w": 44, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 44, "h": 39 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 86, "y": 86, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 44, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 0, "y": 43, "w": 46, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 46, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 193, "y": 42, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 45, "h": 41 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 130, "y": 86, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 44, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 225, "y": 86, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 44, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 216, "y": 126, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 43, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 42, "y": 128, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 43, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 0, "y": 165, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 42, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 172, "y": 166, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 42, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 214, "y": 166, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 42, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 256, "y": 166, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 42, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 128, "y": 126, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 43, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 128, "y": 166, "w": 44, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 44, "h": 39 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 86, "y": 86, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 44, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 0, "y": 43, "w": 46, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 46, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 193, "y": 42, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 45, "h": 41 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 130, "y": 86, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 44, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 225, "y": 86, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 44, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 216, "y": 126, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 43, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 42, "y": 128, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 43, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 0, "y": 165, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 42, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 0, "y": 83, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 44, "h": 41 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 193, "y": 0, "w": 46, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 46, "h": 42 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 99, "y": 0, "w": 48, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 48, "h": 42 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 0, "y": 0, "w": 50, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 50, "h": 43 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 50, "y": 0, "w": 49, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 49, "h": 43 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 147, "y": 0, "w": 46, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 46, "h": 43 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 239, "y": 0, "w": 44, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 44, "h": 43 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 99, "y": 42, "w": 42, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 42, "h": 44 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 46, "y": 43, "w": 42, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 42, "h": 43 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 141, "y": 43, "w": 42, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 42, "h": 43 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 238, "y": 43, "w": 42, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 42, "h": 43 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 183, "y": 83, "w": 42, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 42, "h": 42 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 44, "y": 86, "w": 42, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 42, "h": 42 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 0, "y": 124, "w": 42, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 42, "h": 41 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 174, "y": 125, "w": 42, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 42, "h": 41 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 86, "y": 126, "w": 42, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 42, "h": 41 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 85, "y": 167, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 42, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "843.png", + "format": "I8", + "size": { "w": 298, "h": 207 }, + "scale": "1", + "frameTags": [ + ], + "layers": [ + { "name": "Layer", "opacity": 255, "blendMode": "normal" } + ], + "slices": [ + ] + } } diff --git a/public/images/pokemon/843.png b/public/images/pokemon/843.png index 1206c17a175..6173aff379e 100644 Binary files a/public/images/pokemon/843.png and b/public/images/pokemon/843.png differ diff --git a/public/images/pokemon/844.json b/public/images/pokemon/844.json index bd0259cbca6..2421d17e37b 100644 --- a/public/images/pokemon/844.json +++ b/public/images/pokemon/844.json @@ -1,41 +1,1593 @@ -{ - "textures": [ - { - "image": "844.png", - "format": "RGBA8888", - "size": { - "w": 85, - "h": 85 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 85, - "h": 54 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 85, - "h": 54 - }, - "frame": { - "x": 0, - "y": 0, - "w": 85, - "h": 54 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:981f5a37bc3702df89db4a5ac6c537ee:1d3142106244c076d570680194ab4418:791c04bd94958ea464eaa02b1a2ef466$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 163, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 83, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0002.png", + "frame": { "x": 0, "y": 163, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 83, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0003.png", + "frame": { "x": 172, "y": 0, "w": 85, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 85, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0004.png", + "frame": { "x": 172, "y": 0, "w": 85, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 85, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 0, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 86, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 0, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 86, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0007.png", + "frame": { "x": 86, "y": 0, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 86, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0008.png", + "frame": { "x": 86, "y": 0, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 86, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0009.png", + "frame": { "x": 342, "y": 54, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0010.png", + "frame": { "x": 342, "y": 54, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0011.png", + "frame": { "x": 427, "y": 54, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0012.png", + "frame": { "x": 0, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0013.png", + "frame": { "x": 0, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0014.png", + "frame": { "x": 85, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0015.png", + "frame": { "x": 170, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0016.png", + "frame": { "x": 170, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0017.png", + "frame": { "x": 255, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0018.png", + "frame": { "x": 254, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0019.png", + "frame": { "x": 0, "y": 163, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 250 + }, + { + "filename": "0020.png", + "frame": { "x": 0, "y": 163, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0021.png", + "frame": { "x": 340, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0022.png", + "frame": { "x": 340, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0023.png", + "frame": { "x": 343, "y": 0, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 86, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0024.png", + "frame": { "x": 343, "y": 0, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 86, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0025.png", + "frame": { "x": 425, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0026.png", + "frame": { "x": 425, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0027.png", + "frame": { "x": 85, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0028.png", + "frame": { "x": 0, "y": 109, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0029.png", + "frame": { "x": 0, "y": 109, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0030.png", + "frame": { "x": 429, "y": 0, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 86, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0031.png", + "frame": { "x": 257, "y": 0, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 86, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0032.png", + "frame": { "x": 257, "y": 54, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0033.png", + "frame": { "x": 85, "y": 109, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0034.png", + "frame": { "x": 338, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0035.png", + "frame": { "x": 338, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0036.png", + "frame": { "x": 422, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0037.png", + "frame": { "x": 422, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0038.png", + "frame": { "x": 0, "y": 163, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 83, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 250 + }, + { + "filename": "0039.png", + "frame": { "x": 0, "y": 163, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 83, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0040.png", + "frame": { "x": 172, "y": 0, "w": 85, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 85, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0041.png", + "frame": { "x": 172, "y": 0, "w": 85, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 85, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0042.png", + "frame": { "x": 0, "y": 0, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 86, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0043.png", + "frame": { "x": 0, "y": 0, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 86, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0044.png", + "frame": { "x": 86, "y": 0, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 86, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0045.png", + "frame": { "x": 86, "y": 0, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 86, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0046.png", + "frame": { "x": 342, "y": 54, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0047.png", + "frame": { "x": 342, "y": 54, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0048.png", + "frame": { "x": 427, "y": 54, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0049.png", + "frame": { "x": 0, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0050.png", + "frame": { "x": 0, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0051.png", + "frame": { "x": 85, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0052.png", + "frame": { "x": 170, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0053.png", + "frame": { "x": 170, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0054.png", + "frame": { "x": 255, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0055.png", + "frame": { "x": 254, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0056.png", + "frame": { "x": 0, "y": 163, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 250 + }, + { + "filename": "0057.png", + "frame": { "x": 0, "y": 163, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0058.png", + "frame": { "x": 340, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0059.png", + "frame": { "x": 340, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0060.png", + "frame": { "x": 343, "y": 0, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 86, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0061.png", + "frame": { "x": 343, "y": 0, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 86, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0062.png", + "frame": { "x": 425, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0063.png", + "frame": { "x": 425, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0064.png", + "frame": { "x": 85, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0065.png", + "frame": { "x": 0, "y": 109, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0066.png", + "frame": { "x": 0, "y": 109, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0067.png", + "frame": { "x": 429, "y": 0, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 86, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0068.png", + "frame": { "x": 257, "y": 0, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 86, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0069.png", + "frame": { "x": 257, "y": 54, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0070.png", + "frame": { "x": 85, "y": 109, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0071.png", + "frame": { "x": 338, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0072.png", + "frame": { "x": 338, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0073.png", + "frame": { "x": 422, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0074.png", + "frame": { "x": 422, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0075.png", + "frame": { "x": 0, "y": 163, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 83, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 250 + }, + { + "filename": "0076.png", + "frame": { "x": 0, "y": 163, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 83, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0077.png", + "frame": { "x": 172, "y": 0, "w": 85, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 85, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0078.png", + "frame": { "x": 172, "y": 0, "w": 85, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 85, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0079.png", + "frame": { "x": 0, "y": 0, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 86, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0080.png", + "frame": { "x": 0, "y": 0, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 86, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0081.png", + "frame": { "x": 86, "y": 0, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 86, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0082.png", + "frame": { "x": 86, "y": 0, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 86, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0083.png", + "frame": { "x": 342, "y": 54, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0084.png", + "frame": { "x": 342, "y": 54, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0085.png", + "frame": { "x": 427, "y": 54, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0086.png", + "frame": { "x": 0, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0087.png", + "frame": { "x": 0, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0088.png", + "frame": { "x": 85, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0089.png", + "frame": { "x": 170, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0090.png", + "frame": { "x": 170, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0091.png", + "frame": { "x": 255, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0092.png", + "frame": { "x": 254, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0093.png", + "frame": { "x": 0, "y": 163, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 250 + }, + { + "filename": "0094.png", + "frame": { "x": 0, "y": 163, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0095.png", + "frame": { "x": 340, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0096.png", + "frame": { "x": 340, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0097.png", + "frame": { "x": 343, "y": 0, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 86, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0098.png", + "frame": { "x": 343, "y": 0, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 86, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0099.png", + "frame": { "x": 425, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0100.png", + "frame": { "x": 425, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0101.png", + "frame": { "x": 85, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0102.png", + "frame": { "x": 0, "y": 109, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0103.png", + "frame": { "x": 0, "y": 109, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0104.png", + "frame": { "x": 429, "y": 0, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 86, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0105.png", + "frame": { "x": 257, "y": 0, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 86, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0106.png", + "frame": { "x": 257, "y": 54, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0107.png", + "frame": { "x": 85, "y": 109, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0108.png", + "frame": { "x": 338, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0109.png", + "frame": { "x": 338, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0110.png", + "frame": { "x": 422, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0111.png", + "frame": { "x": 422, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0112.png", + "frame": { "x": 0, "y": 163, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 83, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 250 + }, + { + "filename": "0113.png", + "frame": { "x": 0, "y": 163, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 83, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0114.png", + "frame": { "x": 172, "y": 0, "w": 85, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 85, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0115.png", + "frame": { "x": 172, "y": 0, "w": 85, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 85, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0116.png", + "frame": { "x": 0, "y": 0, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 86, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0117.png", + "frame": { "x": 0, "y": 0, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 86, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0118.png", + "frame": { "x": 86, "y": 0, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 86, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0119.png", + "frame": { "x": 86, "y": 0, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 86, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0120.png", + "frame": { "x": 342, "y": 54, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0121.png", + "frame": { "x": 342, "y": 54, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0122.png", + "frame": { "x": 427, "y": 54, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0123.png", + "frame": { "x": 0, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0124.png", + "frame": { "x": 0, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0125.png", + "frame": { "x": 85, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0126.png", + "frame": { "x": 170, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0127.png", + "frame": { "x": 170, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0128.png", + "frame": { "x": 255, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0129.png", + "frame": { "x": 254, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0130.png", + "frame": { "x": 0, "y": 163, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 250 + }, + { + "filename": "0131.png", + "frame": { "x": 0, "y": 163, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0132.png", + "frame": { "x": 340, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0133.png", + "frame": { "x": 340, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0134.png", + "frame": { "x": 343, "y": 0, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 86, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0135.png", + "frame": { "x": 343, "y": 0, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 86, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0136.png", + "frame": { "x": 425, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0137.png", + "frame": { "x": 425, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0138.png", + "frame": { "x": 85, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0139.png", + "frame": { "x": 0, "y": 109, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0140.png", + "frame": { "x": 0, "y": 109, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0141.png", + "frame": { "x": 429, "y": 0, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 86, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0142.png", + "frame": { "x": 257, "y": 0, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 86, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0143.png", + "frame": { "x": 257, "y": 54, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0144.png", + "frame": { "x": 85, "y": 109, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0145.png", + "frame": { "x": 338, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0146.png", + "frame": { "x": 338, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0147.png", + "frame": { "x": 422, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0148.png", + "frame": { "x": 422, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0149.png", + "frame": { "x": 0, "y": 163, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 83, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 350 + }, + { + "filename": "0150.png", + "frame": { "x": 0, "y": 163, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 83, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0151.png", + "frame": { "x": 164, "y": 163, "w": 82, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 82, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0152.png", + "frame": { "x": 164, "y": 163, "w": 82, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 82, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0153.png", + "frame": { "x": 407, "y": 216, "w": 80, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 80, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0154.png", + "frame": { "x": 407, "y": 216, "w": 80, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 80, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0155.png", + "frame": { "x": 164, "y": 217, "w": 79, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 79, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0156.png", + "frame": { "x": 164, "y": 217, "w": 79, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 79, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0157.png", + "frame": { "x": 80, "y": 218, "w": 78, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 6, "w": 78, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0158.png", + "frame": { "x": 80, "y": 218, "w": 78, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 6, "w": 78, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0159.png", + "frame": { "x": 243, "y": 270, "w": 76, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 6, "w": 76, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 150 + }, + { + "filename": "0160.png", + "frame": { "x": 243, "y": 270, "w": 76, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 6, "w": 76, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0161.png", + "frame": { "x": 158, "y": 271, "w": 74, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 6, "w": 74, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 250 + }, + { + "filename": "0162.png", + "frame": { "x": 158, "y": 271, "w": 74, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 6, "w": 74, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0163.png", + "frame": { "x": 319, "y": 271, "w": 73, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 6, "w": 73, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 400 + }, + { + "filename": "0164.png", + "frame": { "x": 319, "y": 271, "w": 73, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 6, "w": 73, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0165.png", + "frame": { "x": 0, "y": 271, "w": 75, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 5, "w": 75, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0166.png", + "frame": { "x": 407, "y": 270, "w": 76, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 76, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0167.png", + "frame": { "x": 328, "y": 216, "w": 79, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 1, "w": 79, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0168.png", + "frame": { "x": 0, "y": 217, "w": 80, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 80, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0169.png", + "frame": { "x": 83, "y": 163, "w": 81, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 81, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0170.png", + "frame": { "x": 246, "y": 216, "w": 82, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 82, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0171.png", + "frame": { "x": 85, "y": 109, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0172.png", + "frame": { "x": 85, "y": 109, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0173.png", + "frame": { "x": 170, "y": 109, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0174.png", + "frame": { "x": 170, "y": 109, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0175.png", + "frame": { "x": 0, "y": 163, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 83, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 300 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "844.png", + "format": "I8", + "size": { "w": 515, "h": 325 }, + "scale": "1", + "frameTags": [ + ], + "layers": [ + { "name": "Layer", "opacity": 255, "blendMode": "normal" } + ], + "slices": [ + ] + } } diff --git a/public/images/pokemon/844.png b/public/images/pokemon/844.png index 42c4a0826a0..c7a691eaff5 100644 Binary files a/public/images/pokemon/844.png and b/public/images/pokemon/844.png differ diff --git a/public/images/pokemon/902-female.json b/public/images/pokemon/902-female.json index b63745ba546..aec0bdbcc05 100644 --- a/public/images/pokemon/902-female.json +++ b/public/images/pokemon/902-female.json @@ -1,41 +1,828 @@ -{ - "textures": [ - { - "image": "902-female.png", - "format": "RGBA8888", - "size": { - "w": 86, - "h": 86 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 86, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 86, - "h": 51 - }, - "frame": { - "x": 0, - "y": 0, - "w": 86, - "h": 51 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:d5f9c953dd3917273fb1e7762f1a8b60:b7be8aa616947b7033ac17c5e596c131:16072dc598107c41afadd9df4d7c27da$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 582, "y": 294, "w": 86, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 86, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 170, "y": 341, "w": 83, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 83, "h": 52 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 253, "y": 341, "w": 79, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 21, "w": 79, "h": 54 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 413, "y": 343, "w": 73, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 22, "w": 73, "h": 56 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 347, "y": 68, "w": 76, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 23, "w": 76, "h": 58 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 503, "y": 289, "w": 79, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 25, "w": 79, "h": 57 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 594, "y": 238, "w": 81, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 28, "w": 81, "h": 56 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 87, "y": 77, "w": 84, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 30, "w": 84, "h": 55 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 77, "y": 189, "w": 88, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 31, "w": 88, "h": 53 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 0, "y": 242, "w": 91, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 29, "w": 91, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 438, "y": 185, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 28, "w": 94, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 535, "y": 133, "w": 97, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 26, "w": 97, "h": 52 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 323, "y": 188, "w": 94, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 25, "w": 94, "h": 50 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 503, "y": 238, "w": 91, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 22, "w": 91, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 91, "y": 257, "w": 90, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 21, "w": 90, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 582, "y": 294, "w": 86, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 86, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 170, "y": 341, "w": 83, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 83, "h": 52 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 253, "y": 341, "w": 79, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 21, "w": 79, "h": 54 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 413, "y": 343, "w": 73, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 22, "w": 73, "h": 56 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 347, "y": 68, "w": 76, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 23, "w": 76, "h": 58 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 503, "y": 289, "w": 79, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 25, "w": 79, "h": 57 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 594, "y": 238, "w": 81, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 28, "w": 81, "h": 56 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 87, "y": 77, "w": 84, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 30, "w": 84, "h": 55 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 77, "y": 189, "w": 88, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 31, "w": 88, "h": 53 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 0, "y": 242, "w": 91, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 29, "w": 91, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 438, "y": 185, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 28, "w": 94, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 535, "y": 133, "w": 97, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 26, "w": 97, "h": 52 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 323, "y": 188, "w": 94, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 25, "w": 94, "h": 50 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 503, "y": 238, "w": 91, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 22, "w": 91, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 91, "y": 257, "w": 90, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 21, "w": 90, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 582, "y": 294, "w": 86, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 86, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 170, "y": 341, "w": 83, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 83, "h": 52 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 253, "y": 341, "w": 79, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 21, "w": 79, "h": 54 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 413, "y": 343, "w": 73, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 22, "w": 73, "h": 56 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 347, "y": 68, "w": 76, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 23, "w": 76, "h": 58 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 503, "y": 289, "w": 79, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 25, "w": 79, "h": 57 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 594, "y": 238, "w": 81, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 28, "w": 81, "h": 56 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 87, "y": 77, "w": 84, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 30, "w": 84, "h": 55 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 77, "y": 189, "w": 88, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 31, "w": 88, "h": 53 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 0, "y": 242, "w": 91, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 29, "w": 91, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 438, "y": 185, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 28, "w": 94, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 535, "y": 133, "w": 97, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 26, "w": 97, "h": 52 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 323, "y": 188, "w": 94, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 25, "w": 94, "h": 50 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 503, "y": 238, "w": 91, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 22, "w": 91, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 91, "y": 257, "w": 90, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 21, "w": 90, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 582, "y": 294, "w": 86, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 86, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 170, "y": 341, "w": 83, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 83, "h": 52 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 253, "y": 341, "w": 79, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 21, "w": 79, "h": 54 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 413, "y": 343, "w": 73, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 22, "w": 73, "h": 56 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 347, "y": 68, "w": 76, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 23, "w": 76, "h": 58 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 503, "y": 289, "w": 79, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 25, "w": 79, "h": 57 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 594, "y": 238, "w": 81, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 28, "w": 81, "h": 56 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 87, "y": 77, "w": 84, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 30, "w": 84, "h": 55 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 77, "y": 189, "w": 88, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 31, "w": 88, "h": 53 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 242, "w": 91, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 29, "w": 91, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 438, "y": 185, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 28, "w": 94, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 535, "y": 133, "w": 97, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 26, "w": 97, "h": 52 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 323, "y": 188, "w": 94, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 25, "w": 94, "h": 50 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 503, "y": 238, "w": 91, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 22, "w": 91, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 91, "y": 257, "w": 90, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 21, "w": 90, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 0, "y": 293, "w": 86, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 86, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 253, "y": 238, "w": 91, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 91, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 438, "y": 133, "w": 97, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 17, "w": 97, "h": 52 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 181, "y": 289, "w": 88, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 14, "w": 88, "h": 52 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 332, "y": 343, "w": 81, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 11, "w": 81, "h": 52 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 86, "y": 308, "w": 84, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 8, "w": 84, "h": 52 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 357, "y": 290, "w": 84, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 84, "h": 53 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 417, "y": 236, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 6, "w": 86, "h": 54 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 0, "y": 76, "w": 87, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 2, "w": 87, "h": 60 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 340, "y": 0, "w": 85, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 0, "w": 85, "h": 68 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 87, "y": 0, "w": 85, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 85, "h": 77 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 262, "y": 0, "w": 78, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 78, "h": 76 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 178, "y": 133, "w": 71, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 8, "w": 71, "h": 71 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 518, "y": 0, "w": 80, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 7, "w": 80, "h": 72 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 0, "y": 0, "w": 87, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 87, "h": 76 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 598, "y": 0, "w": 80, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 80, "h": 71 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 249, "y": 134, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 13, "w": 74, "h": 67 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 425, "y": 62, "w": 82, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 82, "h": 69 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 172, "y": 0, "w": 90, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 90, "h": 68 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 172, "y": 68, "w": 84, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 14, "w": 84, "h": 65 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 0, "y": 136, "w": 77, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 14, "w": 77, "h": 64 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 598, "y": 71, "w": 81, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 16, "w": 81, "h": 61 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 507, "y": 72, "w": 88, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 15, "w": 88, "h": 61 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 425, "y": 0, "w": 93, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 14, "w": 93, "h": 62 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 256, "y": 76, "w": 91, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 17, "w": 91, "h": 58 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 347, "y": 131, "w": 91, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 17, "w": 91, "h": 57 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 87, "y": 133, "w": 91, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 18, "w": 91, "h": 56 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 532, "y": 185, "w": 89, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 19, "w": 89, "h": 53 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 165, "y": 204, "w": 88, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 19, "w": 88, "h": 53 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 269, "y": 289, "w": 88, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 19, "w": 88, "h": 52 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "902-female.png", + "format": "I8", + "size": { "w": 679, "h": 399 }, + "scale": "1", + "frameTags": [ + ], + "layers": [ + { "name": "Layer", "opacity": 255, "blendMode": "normal" } + ], + "slices": [ + ] + } } diff --git a/public/images/pokemon/902-female.png b/public/images/pokemon/902-female.png index c4075a32fdf..6d3684bb6ee 100644 Binary files a/public/images/pokemon/902-female.png and b/public/images/pokemon/902-female.png differ diff --git a/public/images/pokemon/902.json b/public/images/pokemon/902.json index 7e8b3222655..2e788b240c8 100644 --- a/public/images/pokemon/902.json +++ b/public/images/pokemon/902.json @@ -1,41 +1,828 @@ -{ - "textures": [ - { - "image": "902.png", - "format": "RGBA8888", - "size": { - "w": 86, - "h": 86 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 86, - "h": 54 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 86, - "h": 54 - }, - "frame": { - "x": 0, - "y": 0, - "w": 86, - "h": 54 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:afd87be702528254edaf76f41ea810af:3eac0c3956848ec21cd8468f625096e4:7d196ae78ad956c5eb9131e145b5922f$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 510, "y": 305, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 86, "h": 54 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 0, "y": 306, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 83, "h": 55 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 422, "y": 353, "w": 79, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 21, "w": 79, "h": 56 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 257, "y": 356, "w": 73, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 22, "w": 73, "h": 59 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 596, "y": 305, "w": 76, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 23, "w": 76, "h": 61 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 178, "y": 298, "w": 79, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 25, "w": 79, "h": 60 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 257, "y": 298, "w": 81, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 28, "w": 81, "h": 58 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 594, "y": 194, "w": 84, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 30, "w": 84, "h": 57 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 165, "y": 204, "w": 88, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 31, "w": 88, "h": 55 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 74, "y": 199, "w": 91, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 29, "w": 91, "h": 54 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 409, "y": 190, "w": 94, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 28, "w": 94, "h": 53 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 448, "y": 138, "w": 97, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 26, "w": 97, "h": 52 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 497, "y": 248, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 25, "w": 94, "h": 51 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 253, "y": 245, "w": 91, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 22, "w": 91, "h": 53 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 0, "y": 253, "w": 90, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 21, "w": 90, "h": 53 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 510, "y": 305, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 86, "h": 54 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 306, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 83, "h": 55 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 422, "y": 353, "w": 79, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 21, "w": 79, "h": 56 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 257, "y": 356, "w": 73, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 22, "w": 73, "h": 59 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 596, "y": 305, "w": 76, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 23, "w": 76, "h": 61 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 178, "y": 298, "w": 79, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 25, "w": 79, "h": 60 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 257, "y": 298, "w": 81, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 28, "w": 81, "h": 58 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 594, "y": 194, "w": 84, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 30, "w": 84, "h": 57 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 165, "y": 204, "w": 88, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 31, "w": 88, "h": 55 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 74, "y": 199, "w": 91, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 29, "w": 91, "h": 54 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 409, "y": 190, "w": 94, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 28, "w": 94, "h": 53 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 448, "y": 138, "w": 97, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 26, "w": 97, "h": 52 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 497, "y": 248, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 25, "w": 94, "h": 51 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 253, "y": 245, "w": 91, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 22, "w": 91, "h": 53 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 0, "y": 253, "w": 90, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 21, "w": 90, "h": 53 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 510, "y": 305, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 86, "h": 54 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 0, "y": 306, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 83, "h": 55 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 422, "y": 353, "w": 79, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 21, "w": 79, "h": 56 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 257, "y": 356, "w": 73, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 22, "w": 73, "h": 59 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 596, "y": 305, "w": 76, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 23, "w": 76, "h": 61 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 178, "y": 298, "w": 79, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 25, "w": 79, "h": 60 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 257, "y": 298, "w": 81, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 28, "w": 81, "h": 58 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 594, "y": 194, "w": 84, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 30, "w": 84, "h": 57 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 165, "y": 204, "w": 88, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 31, "w": 88, "h": 55 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 74, "y": 199, "w": 91, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 29, "w": 91, "h": 54 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 409, "y": 190, "w": 94, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 28, "w": 94, "h": 53 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 448, "y": 138, "w": 97, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 26, "w": 97, "h": 52 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 497, "y": 248, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 25, "w": 94, "h": 51 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 253, "y": 245, "w": 91, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 22, "w": 91, "h": 53 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 0, "y": 253, "w": 90, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 21, "w": 90, "h": 53 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 510, "y": 305, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 86, "h": 54 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 0, "y": 306, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 83, "h": 55 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 422, "y": 353, "w": 79, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 21, "w": 79, "h": 56 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 257, "y": 356, "w": 73, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 22, "w": 73, "h": 59 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 596, "y": 305, "w": 76, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 23, "w": 76, "h": 61 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 178, "y": 298, "w": 79, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 25, "w": 79, "h": 60 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 257, "y": 298, "w": 81, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 28, "w": 81, "h": 58 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 594, "y": 194, "w": 84, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 30, "w": 84, "h": 57 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 165, "y": 204, "w": 88, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 31, "w": 88, "h": 55 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 74, "y": 199, "w": 91, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 29, "w": 91, "h": 54 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 409, "y": 190, "w": 94, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 28, "w": 94, "h": 53 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 448, "y": 138, "w": 97, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 26, "w": 97, "h": 52 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 497, "y": 248, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 25, "w": 94, "h": 51 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 253, "y": 245, "w": 91, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 22, "w": 91, "h": 53 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 0, "y": 253, "w": 90, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 21, "w": 90, "h": 53 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 424, "y": 299, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 86, "h": 54 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 503, "y": 194, "w": 91, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 91, "h": 54 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 351, "y": 136, "w": 97, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 17, "w": 97, "h": 53 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 591, "y": 251, "w": 88, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 14, "w": 88, "h": 54 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 167, "y": 358, "w": 81, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 11, "w": 81, "h": 53 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 338, "y": 352, "w": 84, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 8, "w": 84, "h": 53 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 83, "y": 313, "w": 84, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 84, "h": 53 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 338, "y": 298, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 6, "w": 86, "h": 54 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 586, "y": 134, "w": 87, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 2, "w": 87, "h": 60 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 513, "y": 0, "w": 85, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 0, "w": 85, "h": 70 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 87, "y": 0, "w": 85, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 85, "h": 80 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 262, "y": 0, "w": 78, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 78, "h": 79 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 91, "y": 80, "w": 71, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 8, "w": 71, "h": 74 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 340, "y": 0, "w": 80, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 7, "w": 80, "h": 75 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 0, "y": 0, "w": 87, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 87, "h": 79 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 598, "y": 0, "w": 80, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 80, "h": 73 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 0, "y": 138, "w": 74, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 13, "w": 74, "h": 69 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 420, "y": 64, "w": 82, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 82, "h": 72 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 172, "y": 0, "w": 90, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 90, "h": 71 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 502, "y": 70, "w": 84, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 14, "w": 84, "h": 68 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 243, "y": 138, "w": 77, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 14, "w": 77, "h": 66 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 162, "y": 135, "w": 81, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 16, "w": 81, "h": 64 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 172, "y": 71, "w": 88, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 15, "w": 88, "h": 64 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 420, "y": 0, "w": 93, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 14, "w": 93, "h": 64 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 586, "y": 73, "w": 91, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 17, "w": 91, "h": 61 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 260, "y": 79, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 17, "w": 91, "h": 59 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 0, "y": 80, "w": 91, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 18, "w": 91, "h": 58 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 320, "y": 189, "w": 89, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 19, "w": 89, "h": 56 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 409, "y": 243, "w": 88, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 19, "w": 88, "h": 55 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 90, "y": 259, "w": 88, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 19, "w": 88, "h": 54 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "902.png", + "format": "I8", + "size": { "w": 679, "h": 415 }, + "scale": "1", + "frameTags": [ + ], + "layers": [ + { "name": "Layer", "opacity": 255, "blendMode": "normal" } + ], + "slices": [ + ] + } } diff --git a/public/images/pokemon/902.png b/public/images/pokemon/902.png index 2191b2033e8..14d1bac02bd 100644 Binary files a/public/images/pokemon/902.png and b/public/images/pokemon/902.png differ diff --git a/public/images/pokemon/back/550-white-striped.json b/public/images/pokemon/back/550-white-striped.json index fe8d465ace0..31b34514ddf 100644 --- a/public/images/pokemon/back/550-white-striped.json +++ b/public/images/pokemon/back/550-white-striped.json @@ -1,41 +1,810 @@ -{ - "textures": [ - { - "image": "550-white-striped.png", - "format": "RGBA8888", - "size": { - "w": 39, - "h": 39 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 39, - "h": 37 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 39, - "h": 37 - }, - "frame": { - "x": 0, - "y": 0, - "w": 39, - "h": 37 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:2f19686f16a9b97b77c4465d2bc54843:791ceedc6ff57dfd655e793319b3601d:f97864a794849ea9866466461e0e9a7f$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 80, "y": 111, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 40, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 159, "y": 111, "w": 38, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 38, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 185, "y": 148, "w": 36, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 36, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 36, "y": 185, "w": 34, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 4, "w": 34, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 104, "y": 185, "w": 33, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 5, "w": 33, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 137, "y": 185, "w": 33, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 5, "w": 33, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 70, "y": 185, "w": 34, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 4, "w": 34, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 253, "y": 37, "w": 35, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 35, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 0, "y": 185, "w": 36, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 36, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 221, "y": 148, "w": 36, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 36, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 148, "w": 37, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 37, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 197, "y": 111, "w": 38, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 38, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 120, "y": 111, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 39, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 249, "y": 74, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 39, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 84, "y": 74, "w": 42, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 42, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 185, "y": 0, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 44, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 48, "y": 0, "w": 46, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 46, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 0, "w": 48, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 48, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 94, "y": 0, "w": 46, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 46, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 140, "y": 0, "w": 45, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 45, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 229, "y": 0, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 44, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 0, "y": 37, "w": 43, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 43, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 42, "y": 74, "w": 42, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 42, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 208, "y": 74, "w": 41, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 41, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 80, "y": 111, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 40, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 159, "y": 111, "w": 38, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 38, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 185, "y": 148, "w": 36, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 36, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 36, "y": 185, "w": 34, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 4, "w": 34, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 104, "y": 185, "w": 33, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 5, "w": 33, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 137, "y": 185, "w": 33, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 5, "w": 33, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 70, "y": 185, "w": 34, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 4, "w": 34, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 253, "y": 37, "w": 35, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 35, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 0, "y": 185, "w": 36, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 36, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 221, "y": 148, "w": 36, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 36, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 0, "y": 148, "w": 37, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 37, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 197, "y": 111, "w": 38, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 38, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 120, "y": 111, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 39, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 249, "y": 74, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 39, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 84, "y": 74, "w": 42, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 42, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 185, "y": 0, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 44, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 48, "y": 0, "w": 46, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 46, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 0, "y": 0, "w": 48, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 48, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 94, "y": 0, "w": 46, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 46, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 140, "y": 0, "w": 45, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 45, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 229, "y": 0, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 44, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 0, "y": 37, "w": 43, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 43, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 42, "y": 74, "w": 42, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 42, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 208, "y": 74, "w": 41, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 41, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 80, "y": 111, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 40, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 159, "y": 111, "w": 38, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 38, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 185, "y": 148, "w": 36, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 36, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 36, "y": 185, "w": 34, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 4, "w": 34, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 104, "y": 185, "w": 33, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 5, "w": 33, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 137, "y": 185, "w": 33, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 5, "w": 33, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 70, "y": 185, "w": 34, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 4, "w": 34, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 253, "y": 37, "w": 35, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 35, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 0, "y": 185, "w": 36, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 36, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 221, "y": 148, "w": 36, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 36, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 0, "y": 148, "w": 37, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 37, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 197, "y": 111, "w": 38, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 38, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 120, "y": 111, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 39, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 249, "y": 74, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 39, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 84, "y": 74, "w": 42, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 42, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 185, "y": 0, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 44, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 48, "y": 0, "w": 46, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 46, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 0, "y": 0, "w": 48, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 48, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 94, "y": 0, "w": 46, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 46, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 140, "y": 0, "w": 45, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 45, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 229, "y": 0, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 44, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 0, "y": 37, "w": 43, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 43, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 42, "y": 74, "w": 42, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 42, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 208, "y": 74, "w": 41, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 41, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 80, "y": 111, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 40, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 235, "y": 111, "w": 37, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 1, "w": 37, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 0, "y": 74, "w": 42, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 42, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 37, "y": 148, "w": 37, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 37, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 211, "y": 37, "w": 42, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 42, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 74, "y": 148, "w": 37, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 1, "w": 37, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 169, "y": 37, "w": 42, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 1, "w": 42, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 111, "y": 148, "w": 37, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 0, "w": 37, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 127, "y": 37, "w": 42, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 0, "w": 42, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 0, "y": 111, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 0, "w": 40, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 148, "y": 148, "w": 37, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 0, "w": 37, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 40, "y": 111, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 0, "w": 40, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 85, "y": 37, "w": 42, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 1, "w": 42, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 43, "y": 37, "w": 42, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 42, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 126, "y": 74, "w": 41, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 41, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 167, "y": 74, "w": 41, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 41, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "550-white-striped.png", + "format": "I8", + "size": { "w": 288, "h": 222 }, + "scale": "1", + "frameTags": [ + ], + "layers": [ + { "name": "Layer", "opacity": 255, "blendMode": "normal" } + ], + "slices": [ + ] + } } diff --git a/public/images/pokemon/back/550-white-striped.png b/public/images/pokemon/back/550-white-striped.png index e3900e82ea2..6a597a631cd 100644 Binary files a/public/images/pokemon/back/550-white-striped.png and b/public/images/pokemon/back/550-white-striped.png differ diff --git a/public/images/pokemon/back/769.json b/public/images/pokemon/back/769.json index 379e649c963..f786bd9e384 100644 --- a/public/images/pokemon/back/769.json +++ b/public/images/pokemon/back/769.json @@ -1,41 +1,423 @@ -{ - "textures": [ - { - "image": "769.png", - "format": "RGBA8888", - "size": { - "w": 54, - "h": 54 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 54, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 54, - "h": 46 - }, - "frame": { - "x": 0, - "y": 0, - "w": 54, - "h": 46 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:2f6af04d97f063cb51311504c4e64bfd:9d77bbfdfee3bc3c4f7c0bca665f6e7b:ba2e5a01352778ce94d84746368de8fc$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 215, "y": 47, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 215, "y": 47, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 0, "w": 54, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 54, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 217, "y": 0, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 162, "y": 46, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 215, "y": 47, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 215, "y": 47, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 0, "w": 54, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 54, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 217, "y": 0, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 162, "y": 46, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 215, "y": 47, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 330 + }, + { + "filename": "0012.png", + "frame": { "x": 215, "y": 47, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0013.png", + "frame": { "x": 0, "y": 0, "w": 54, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 54, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0014.png", + "frame": { "x": 217, "y": 0, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0015.png", + "frame": { "x": 162, "y": 46, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0016.png", + "frame": { "x": 215, "y": 47, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0017.png", + "frame": { "x": 215, "y": 47, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 0, "w": 54, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 54, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0019.png", + "frame": { "x": 217, "y": 0, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0020.png", + "frame": { "x": 162, "y": 46, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0021.png", + "frame": { "x": 215, "y": 47, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 330 + }, + { + "filename": "0022.png", + "frame": { "x": 215, "y": 47, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0023.png", + "frame": { "x": 162, "y": 0, "w": 55, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 55, "h": 46 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0024.png", + "frame": { "x": 213, "y": 93, "w": 62, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 10, "w": 62, "h": 39 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0025.png", + "frame": { "x": 73, "y": 94, "w": 71, "h": 26 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 25, "w": 71, "h": 26 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 94, "w": 73, "h": 26 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 26, "w": 73, "h": 26 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 770 + }, + { + "filename": "0027.png", + "frame": { "x": 0, "y": 94, "w": 73, "h": 26 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 26, "w": 73, "h": 26 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0028.png", + "frame": { "x": 73, "y": 94, "w": 71, "h": 26 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 25, "w": 71, "h": 26 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0029.png", + "frame": { "x": 213, "y": 93, "w": 62, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 10, "w": 62, "h": 39 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0030.png", + "frame": { "x": 162, "y": 0, "w": 55, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 55, "h": 46 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0031.png", + "frame": { "x": 215, "y": 47, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0032.png", + "frame": { "x": 215, "y": 47, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0033.png", + "frame": { "x": 0, "y": 0, "w": 54, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 54, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0034.png", + "frame": { "x": 217, "y": 0, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0035.png", + "frame": { "x": 162, "y": 46, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0036.png", + "frame": { "x": 215, "y": 47, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 330 + }, + { + "filename": "0037.png", + "frame": { "x": 215, "y": 47, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0038.png", + "frame": { "x": 54, "y": 0, "w": 54, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 54, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0039.png", + "frame": { "x": 0, "y": 47, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0040.png", + "frame": { "x": 53, "y": 47, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0041.png", + "frame": { "x": 159, "y": 93, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0042.png", + "frame": { "x": 159, "y": 93, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0043.png", + "frame": { "x": 108, "y": 0, "w": 54, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 54, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0044.png", + "frame": { "x": 0, "y": 47, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0045.png", + "frame": { "x": 106, "y": 47, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "769.png", + "format": "I8", + "size": { "w": 275, "h": 139 }, + "scale": "1", + "frameTags": [ + ], + "layers": [ + { "name": "Layer", "opacity": 255, "blendMode": "normal" } + ], + "slices": [ + ] + } } diff --git a/public/images/pokemon/back/769.png b/public/images/pokemon/back/769.png index 515dff6c64c..c13aa19fba2 100644 Binary files a/public/images/pokemon/back/769.png and b/public/images/pokemon/back/769.png differ diff --git a/public/images/pokemon/back/770.json b/public/images/pokemon/back/770.json index d52eb0dfd15..d67a4c4a08e 100644 --- a/public/images/pokemon/back/770.json +++ b/public/images/pokemon/back/770.json @@ -1,41 +1,594 @@ -{ - "textures": [ - { - "image": "770.png", - "format": "RGBA8888", - "size": { - "w": 76, - "h": 76 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 76, - "h": 57 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 57 - }, - "frame": { - "x": 0, - "y": 0, - "w": 76, - "h": 57 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:bbb23a7eb49b6d6a766d54261d534264:4aa6478267df0d96fef4591110505dc1:9a5e6a86eb0697afa19bc4a32f422cc1$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 111, "w": 76, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 76, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 482, "y": 57, "w": 78, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 78, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 242, "y": 55, "w": 80, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 80, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 78, "y": 54, "w": 82, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 82, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 0, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 84, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 168, "y": 0, "w": 82, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 82, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 332, "y": 0, "w": 80, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 80, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 492, "y": 0, "w": 78, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 78, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 0, "y": 111, "w": 76, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 76, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 482, "y": 57, "w": 78, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 78, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 242, "y": 55, "w": 80, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 80, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 78, "y": 54, "w": 82, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 82, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0013.png", + "frame": { "x": 0, "y": 0, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 84, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0014.png", + "frame": { "x": 168, "y": 0, "w": 82, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 82, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0015.png", + "frame": { "x": 332, "y": 0, "w": 80, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 80, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0016.png", + "frame": { "x": 492, "y": 0, "w": 78, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 78, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 111, "w": 76, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 76, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0018.png", + "frame": { "x": 482, "y": 57, "w": 78, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 78, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0019.png", + "frame": { "x": 242, "y": 55, "w": 80, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 80, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0020.png", + "frame": { "x": 160, "y": 55, "w": 82, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 82, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0021.png", + "frame": { "x": 84, "y": 0, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 84, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0022.png", + "frame": { "x": 250, "y": 0, "w": 82, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 82, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0023.png", + "frame": { "x": 412, "y": 0, "w": 80, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 80, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0024.png", + "frame": { "x": 0, "y": 54, "w": 78, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 78, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0025.png", + "frame": { "x": 312, "y": 111, "w": 76, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 76, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0026.png", + "frame": { "x": 78, "y": 108, "w": 78, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 78, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0027.png", + "frame": { "x": 242, "y": 55, "w": 80, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 80, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0028.png", + "frame": { "x": 78, "y": 54, "w": 82, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 82, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0029.png", + "frame": { "x": 0, "y": 0, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 84, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0030.png", + "frame": { "x": 168, "y": 0, "w": 82, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 82, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0031.png", + "frame": { "x": 332, "y": 0, "w": 80, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 80, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0032.png", + "frame": { "x": 492, "y": 0, "w": 78, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 78, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0033.png", + "frame": { "x": 0, "y": 111, "w": 76, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 76, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0034.png", + "frame": { "x": 482, "y": 57, "w": 78, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 78, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0035.png", + "frame": { "x": 242, "y": 55, "w": 80, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 80, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0036.png", + "frame": { "x": 78, "y": 54, "w": 82, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 82, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0037.png", + "frame": { "x": 0, "y": 0, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 84, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0038.png", + "frame": { "x": 168, "y": 0, "w": 82, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 82, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0039.png", + "frame": { "x": 332, "y": 0, "w": 80, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 80, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0040.png", + "frame": { "x": 492, "y": 0, "w": 78, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 78, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0041.png", + "frame": { "x": 0, "y": 111, "w": 76, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 76, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0042.png", + "frame": { "x": 482, "y": 57, "w": 78, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 78, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0043.png", + "frame": { "x": 242, "y": 55, "w": 80, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 80, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0044.png", + "frame": { "x": 78, "y": 54, "w": 82, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 82, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0045.png", + "frame": { "x": 0, "y": 0, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 84, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0046.png", + "frame": { "x": 168, "y": 0, "w": 82, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 82, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0047.png", + "frame": { "x": 332, "y": 0, "w": 80, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 80, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0048.png", + "frame": { "x": 492, "y": 0, "w": 78, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 78, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0049.png", + "frame": { "x": 0, "y": 111, "w": 76, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 76, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0050.png", + "frame": { "x": 156, "y": 109, "w": 78, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 78, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0051.png", + "frame": { "x": 322, "y": 56, "w": 80, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 80, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0052.png", + "frame": { "x": 464, "y": 113, "w": 83, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 7, "w": 83, "h": 50 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0053.png", + "frame": { "x": 76, "y": 165, "w": 90, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 14, "w": 90, "h": 43 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0054.png", + "frame": { "x": 256, "y": 168, "w": 96, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 96, "h": 37 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0055.png", + "frame": { "x": 352, "y": 168, "w": 96, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 96, "h": 37 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0056.png", + "frame": { "x": 256, "y": 205, "w": 96, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 96, "h": 37 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0057.png", + "frame": { "x": 352, "y": 205, "w": 96, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 96, "h": 37 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0058.png", + "frame": { "x": 256, "y": 205, "w": 96, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 96, "h": 37 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0059.png", + "frame": { "x": 352, "y": 168, "w": 96, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 96, "h": 37 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0060.png", + "frame": { "x": 166, "y": 166, "w": 90, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 14, "w": 90, "h": 43 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0061.png", + "frame": { "x": 464, "y": 163, "w": 83, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 7, "w": 83, "h": 50 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0062.png", + "frame": { "x": 402, "y": 56, "w": 80, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 80, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0063.png", + "frame": { "x": 234, "y": 110, "w": 78, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 78, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0064.png", + "frame": { "x": 388, "y": 111, "w": 76, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 76, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "770.png", + "format": "I8", + "size": { "w": 570, "h": 242 }, + "scale": "1", + "frameTags": [ + ], + "layers": [ + { "name": "Layer", "opacity": 255, "blendMode": "normal" } + ], + "slices": [ + ] + } } diff --git a/public/images/pokemon/back/770.png b/public/images/pokemon/back/770.png index 15a5c78d4fc..5e0008dfb41 100644 Binary files a/public/images/pokemon/back/770.png and b/public/images/pokemon/back/770.png differ diff --git a/public/images/pokemon/back/843.json b/public/images/pokemon/back/843.json index c2ad6db0510..3ce1db1c3d0 100644 --- a/public/images/pokemon/back/843.json +++ b/public/images/pokemon/back/843.json @@ -1,41 +1,648 @@ -{ - "textures": [ - { - "image": "843.png", - "format": "RGBA8888", - "size": { - "w": 45, - "h": 45 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 45, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 41 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 41 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:4d81155c7f88503721ed6b93d98b0c79:5428dc86e244ab063a4aba0c3835641f:1ad579f7e215608104284deec571c282$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 183, "y": 126, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 0, "y": 127, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 228, "y": 163, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 273, "y": 163, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 45, "y": 165, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 44, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 46, "y": 123, "w": 45, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 45, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 142, "y": 84, "w": 46, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 46, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 200, "y": 42, "w": 47, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 47, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 154, "y": 41, "w": 46, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 43 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 188, "y": 84, "w": 46, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 42, "w": 46, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 43 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 0, "y": 85, "w": 46, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 91, "y": 164, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 183, "y": 126, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 0, "y": 127, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 228, "y": 163, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 273, "y": 163, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 45, "y": 165, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 44, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 46, "y": 123, "w": 45, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 45, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 142, "y": 84, "w": 46, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 46, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 200, "y": 42, "w": 47, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 47, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 154, "y": 41, "w": 46, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 43 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 188, "y": 84, "w": 46, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 0, "y": 42, "w": 46, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 43 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 0, "y": 85, "w": 46, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 91, "y": 164, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 183, "y": 126, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 0, "y": 127, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 228, "y": 163, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 273, "y": 163, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 45, "y": 165, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 44, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 46, "y": 123, "w": 45, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 45, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 142, "y": 84, "w": 46, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 46, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 200, "y": 42, "w": 47, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 47, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 154, "y": 41, "w": 46, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 43 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 188, "y": 84, "w": 46, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 0, "y": 42, "w": 46, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 43 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 0, "y": 85, "w": 46, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 91, "y": 164, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 183, "y": 126, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 0, "y": 127, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 228, "y": 163, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 273, "y": 163, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 45, "y": 165, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 44, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 46, "y": 123, "w": 45, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 45, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 142, "y": 84, "w": 46, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 46, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 200, "y": 42, "w": 47, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 47, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 154, "y": 41, "w": 46, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 43 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 188, "y": 84, "w": 46, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 0, "y": 42, "w": 46, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 43 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 0, "y": 85, "w": 46, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 91, "y": 164, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 183, "y": 126, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 57, "y": 40, "w": 48, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 48, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 225, "y": 0, "w": 51, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 51, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 171, "y": 0, "w": 54, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 54, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 0, "y": 0, "w": 57, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 57, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 57, "y": 0, "w": 59, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 59, "h": 40 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 116, "y": 0, "w": 55, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 55, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 276, "y": 0, "w": 52, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 52, "h": 40 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 276, "y": 40, "w": 49, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 49, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 105, "y": 41, "w": 49, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 49, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 247, "y": 81, "w": 48, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 48, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 295, "y": 81, "w": 48, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 48, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 46, "y": 82, "w": 48, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 48, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 94, "y": 82, "w": 48, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 48, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 234, "y": 122, "w": 47, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 47, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 281, "y": 122, "w": 47, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 47, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 91, "y": 123, "w": 46, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 46, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 137, "y": 126, "w": 46, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 46, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "843.png", + "format": "I8", + "size": { "w": 343, "h": 206 }, + "scale": "1", + "frameTags": [ + ], + "layers": [ + { "name": "Layer", "opacity": 255, "blendMode": "normal" } + ], + "slices": [ + ] + } } diff --git a/public/images/pokemon/back/843.png b/public/images/pokemon/back/843.png index b844a1be030..3a8c1f77822 100644 Binary files a/public/images/pokemon/back/843.png and b/public/images/pokemon/back/843.png differ diff --git a/public/images/pokemon/back/844.json b/public/images/pokemon/back/844.json index 5039d5695df..cb865a1c931 100644 --- a/public/images/pokemon/back/844.json +++ b/public/images/pokemon/back/844.json @@ -1,41 +1,1584 @@ -{ - "textures": [ - { - "image": "844.png", - "format": "RGBA8888", - "size": { - "w": 80, - "h": 80 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 80, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 50 - }, - "frame": { - "x": 0, - "y": 0, - "w": 80, - "h": 50 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:0d568ea39ab25fe6b2e779f2d845a354:af6e47ec0a56a08cc144a4c6a0dec86d:791c04bd94958ea464eaa02b1a2ef466$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 81, "y": 151, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 80, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0002.png", + "frame": { "x": 81, "y": 151, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 80, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0003.png", + "frame": { "x": 413, "y": 0, "w": 81, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 81, "h": 51 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0004.png", + "frame": { "x": 413, "y": 0, "w": 81, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 81, "h": 51 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 0, "w": 82, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 82, "h": 52 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 0, "w": 82, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 82, "h": 52 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0007.png", + "frame": { "x": 82, "y": 0, "w": 82, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 82, "h": 51 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0008.png", + "frame": { "x": 82, "y": 0, "w": 82, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 82, "h": 51 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0009.png", + "frame": { "x": 246, "y": 50, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0010.png", + "frame": { "x": 246, "y": 50, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0011.png", + "frame": { "x": 328, "y": 50, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0012.png", + "frame": { "x": 82, "y": 51, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0013.png", + "frame": { "x": 82, "y": 51, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0014.png", + "frame": { "x": 410, "y": 51, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0015.png", + "frame": { "x": 0, "y": 52, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 52, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0017.png", + "frame": { "x": 164, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0018.png", + "frame": { "x": 164, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0019.png", + "frame": { "x": 81, "y": 151, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 80, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 250 + }, + { + "filename": "0020.png", + "frame": { "x": 81, "y": 151, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 80, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0021.png", + "frame": { "x": 246, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0022.png", + "frame": { "x": 246, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0023.png", + "frame": { "x": 247, "y": 0, "w": 83, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 83, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0024.png", + "frame": { "x": 247, "y": 0, "w": 83, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 83, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0025.png", + "frame": { "x": 328, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0026.png", + "frame": { "x": 328, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0027.png", + "frame": { "x": 410, "y": 51, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0028.png", + "frame": { "x": 82, "y": 101, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0029.png", + "frame": { "x": 82, "y": 101, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0030.png", + "frame": { "x": 330, "y": 0, "w": 83, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0031.png", + "frame": { "x": 164, "y": 0, "w": 83, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0032.png", + "frame": { "x": 164, "y": 50, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0033.png", + "frame": { "x": 410, "y": 101, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0034.png", + "frame": { "x": 245, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0035.png", + "frame": { "x": 245, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0036.png", + "frame": { "x": 326, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0037.png", + "frame": { "x": 326, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0038.png", + "frame": { "x": 81, "y": 151, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 80, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 250 + }, + { + "filename": "0039.png", + "frame": { "x": 81, "y": 151, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 80, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0040.png", + "frame": { "x": 413, "y": 0, "w": 81, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 81, "h": 51 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0041.png", + "frame": { "x": 413, "y": 0, "w": 81, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 81, "h": 51 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0042.png", + "frame": { "x": 0, "y": 0, "w": 82, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 82, "h": 52 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0043.png", + "frame": { "x": 0, "y": 0, "w": 82, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 82, "h": 52 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0044.png", + "frame": { "x": 82, "y": 0, "w": 82, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 82, "h": 51 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0045.png", + "frame": { "x": 82, "y": 0, "w": 82, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 82, "h": 51 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0046.png", + "frame": { "x": 246, "y": 50, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0047.png", + "frame": { "x": 246, "y": 50, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0048.png", + "frame": { "x": 328, "y": 50, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0049.png", + "frame": { "x": 82, "y": 51, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0050.png", + "frame": { "x": 82, "y": 51, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0051.png", + "frame": { "x": 410, "y": 51, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0052.png", + "frame": { "x": 0, "y": 52, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0053.png", + "frame": { "x": 0, "y": 52, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0054.png", + "frame": { "x": 164, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0055.png", + "frame": { "x": 164, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0056.png", + "frame": { "x": 81, "y": 151, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 80, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 250 + }, + { + "filename": "0057.png", + "frame": { "x": 81, "y": 151, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 80, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0058.png", + "frame": { "x": 246, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0059.png", + "frame": { "x": 246, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0060.png", + "frame": { "x": 247, "y": 0, "w": 83, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 83, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0061.png", + "frame": { "x": 247, "y": 0, "w": 83, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 83, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0062.png", + "frame": { "x": 328, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0063.png", + "frame": { "x": 328, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0064.png", + "frame": { "x": 410, "y": 51, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0065.png", + "frame": { "x": 82, "y": 101, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0066.png", + "frame": { "x": 82, "y": 101, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0067.png", + "frame": { "x": 330, "y": 0, "w": 83, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0068.png", + "frame": { "x": 164, "y": 0, "w": 83, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0069.png", + "frame": { "x": 164, "y": 50, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0070.png", + "frame": { "x": 410, "y": 101, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0071.png", + "frame": { "x": 245, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0072.png", + "frame": { "x": 245, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0073.png", + "frame": { "x": 326, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0074.png", + "frame": { "x": 326, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0075.png", + "frame": { "x": 81, "y": 151, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 80, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 250 + }, + { + "filename": "0076.png", + "frame": { "x": 81, "y": 151, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 80, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0077.png", + "frame": { "x": 413, "y": 0, "w": 81, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 81, "h": 51 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0078.png", + "frame": { "x": 413, "y": 0, "w": 81, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 81, "h": 51 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0079.png", + "frame": { "x": 0, "y": 0, "w": 82, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 82, "h": 52 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0080.png", + "frame": { "x": 0, "y": 0, "w": 82, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 82, "h": 52 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0081.png", + "frame": { "x": 82, "y": 0, "w": 82, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 82, "h": 51 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0082.png", + "frame": { "x": 82, "y": 0, "w": 82, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 82, "h": 51 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0083.png", + "frame": { "x": 246, "y": 50, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0084.png", + "frame": { "x": 246, "y": 50, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0085.png", + "frame": { "x": 328, "y": 50, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0086.png", + "frame": { "x": 82, "y": 51, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0087.png", + "frame": { "x": 82, "y": 51, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0088.png", + "frame": { "x": 410, "y": 51, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0089.png", + "frame": { "x": 0, "y": 52, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0090.png", + "frame": { "x": 0, "y": 52, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0091.png", + "frame": { "x": 164, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0092.png", + "frame": { "x": 164, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0093.png", + "frame": { "x": 81, "y": 151, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 80, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 250 + }, + { + "filename": "0094.png", + "frame": { "x": 81, "y": 151, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 80, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0095.png", + "frame": { "x": 246, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0096.png", + "frame": { "x": 246, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0097.png", + "frame": { "x": 247, "y": 0, "w": 83, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 83, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0098.png", + "frame": { "x": 247, "y": 0, "w": 83, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 83, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0099.png", + "frame": { "x": 328, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0100.png", + "frame": { "x": 328, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0101.png", + "frame": { "x": 410, "y": 51, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0102.png", + "frame": { "x": 82, "y": 101, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0103.png", + "frame": { "x": 82, "y": 101, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0104.png", + "frame": { "x": 330, "y": 0, "w": 83, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0105.png", + "frame": { "x": 164, "y": 0, "w": 83, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0106.png", + "frame": { "x": 164, "y": 50, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0107.png", + "frame": { "x": 410, "y": 101, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0108.png", + "frame": { "x": 245, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0109.png", + "frame": { "x": 245, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0110.png", + "frame": { "x": 326, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0111.png", + "frame": { "x": 326, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0112.png", + "frame": { "x": 81, "y": 151, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 80, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 250 + }, + { + "filename": "0113.png", + "frame": { "x": 81, "y": 151, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 80, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0114.png", + "frame": { "x": 413, "y": 0, "w": 81, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 81, "h": 51 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0115.png", + "frame": { "x": 413, "y": 0, "w": 81, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 81, "h": 51 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0116.png", + "frame": { "x": 0, "y": 0, "w": 82, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 82, "h": 52 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0117.png", + "frame": { "x": 0, "y": 0, "w": 82, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 82, "h": 52 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0118.png", + "frame": { "x": 82, "y": 0, "w": 82, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 82, "h": 51 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0119.png", + "frame": { "x": 82, "y": 0, "w": 82, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 82, "h": 51 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0120.png", + "frame": { "x": 246, "y": 50, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0121.png", + "frame": { "x": 246, "y": 50, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0122.png", + "frame": { "x": 328, "y": 50, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0123.png", + "frame": { "x": 82, "y": 51, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0124.png", + "frame": { "x": 82, "y": 51, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0125.png", + "frame": { "x": 410, "y": 51, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0126.png", + "frame": { "x": 0, "y": 52, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0127.png", + "frame": { "x": 0, "y": 52, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0128.png", + "frame": { "x": 164, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0129.png", + "frame": { "x": 164, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0130.png", + "frame": { "x": 81, "y": 151, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 80, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 250 + }, + { + "filename": "0131.png", + "frame": { "x": 81, "y": 151, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 80, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0132.png", + "frame": { "x": 246, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0133.png", + "frame": { "x": 246, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0134.png", + "frame": { "x": 247, "y": 0, "w": 83, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 83, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0135.png", + "frame": { "x": 247, "y": 0, "w": 83, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 83, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0136.png", + "frame": { "x": 328, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0137.png", + "frame": { "x": 328, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0138.png", + "frame": { "x": 410, "y": 51, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0139.png", + "frame": { "x": 82, "y": 101, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0140.png", + "frame": { "x": 82, "y": 101, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0141.png", + "frame": { "x": 330, "y": 0, "w": 83, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0142.png", + "frame": { "x": 164, "y": 0, "w": 83, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0143.png", + "frame": { "x": 164, "y": 50, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0144.png", + "frame": { "x": 410, "y": 101, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0145.png", + "frame": { "x": 245, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0146.png", + "frame": { "x": 245, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0147.png", + "frame": { "x": 326, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0148.png", + "frame": { "x": 326, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0149.png", + "frame": { "x": 81, "y": 151, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 80, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 350 + }, + { + "filename": "0150.png", + "frame": { "x": 81, "y": 151, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 80, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0151.png", + "frame": { "x": 407, "y": 151, "w": 79, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 79, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 100 + }, + { + "filename": "0152.png", + "frame": { "x": 407, "y": 151, "w": 79, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 79, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0153.png", + "frame": { "x": 161, "y": 200, "w": 77, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 77, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0154.png", + "frame": { "x": 161, "y": 200, "w": 77, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 77, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0155.png", + "frame": { "x": 307, "y": 200, "w": 75, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 75, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0156.png", + "frame": { "x": 307, "y": 200, "w": 75, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 75, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0157.png", + "frame": { "x": 382, "y": 201, "w": 74, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 74, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0158.png", + "frame": { "x": 382, "y": 201, "w": 74, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 74, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0159.png", + "frame": { "x": 143, "y": 250, "w": 72, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 72, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 150 + }, + { + "filename": "0160.png", + "frame": { "x": 143, "y": 250, "w": 72, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 72, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0161.png", + "frame": { "x": 376, "y": 251, "w": 70, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 70, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 250 + }, + { + "filename": "0162.png", + "frame": { "x": 376, "y": 251, "w": 70, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 70, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0163.png", + "frame": { "x": 69, "y": 255, "w": 69, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 69, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 400 + }, + { + "filename": "0164.png", + "frame": { "x": 69, "y": 255, "w": 69, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 69, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0165.png", + "frame": { "x": 307, "y": 250, "w": 69, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 69, "h": 51 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0166.png", + "frame": { "x": 0, "y": 205, "w": 69, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 69, "h": 53 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0167.png", + "frame": { "x": 74, "y": 201, "w": 69, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 69, "h": 54 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0168.png", + "frame": { "x": 238, "y": 200, "w": 69, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 69, "h": 55 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0169.png", + "frame": { "x": 0, "y": 152, "w": 74, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 74, "h": 53 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0170.png", + "frame": { "x": 410, "y": 101, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0171.png", + "frame": { "x": 410, "y": 101, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0172.png", + "frame": { "x": 0, "y": 102, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0173.png", + "frame": { "x": 0, "y": 102, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0174.png", + "frame": { "x": 81, "y": 151, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 80, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 300 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "844.png", + "format": "I8", + "size": { "w": 494, "h": 305 }, + "scale": "1", + "frameTags": [ + ], + "layers": [ + { "name": "Layer", "opacity": 255, "blendMode": "normal" } + ], + "slices": [ + ] + } } diff --git a/public/images/pokemon/back/844.png b/public/images/pokemon/back/844.png index 3fbea2b077e..1fe88daff9f 100644 Binary files a/public/images/pokemon/back/844.png and b/public/images/pokemon/back/844.png differ diff --git a/public/images/pokemon/back/902-female.json b/public/images/pokemon/back/902-female.json index bdad2905761..7b8355ef84d 100644 --- a/public/images/pokemon/back/902-female.json +++ b/public/images/pokemon/back/902-female.json @@ -1,41 +1,828 @@ -{ - "textures": [ - { - "image": "902-female.png", - "format": "RGBA8888", - "size": { - "w": 93, - "h": 93 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 51 - }, - "frame": { - "x": 0, - "y": 0, - "w": 93, - "h": 51 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:c5ce25f975872380890ee2a247f0ecec:45d20476fb7616d3cd411ed61ea5beaf:16072dc598107c41afadd9df4d7c27da$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 191, "y": 223, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 17, "w": 94, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 557, "y": 266, "w": 89, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 17, "w": 89, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 373, "y": 315, "w": 84, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 19, "w": 84, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 655, "y": 61, "w": 79, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 21, "w": 79, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 85, "y": 317, "w": 81, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 23, "w": 81, "h": 49 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 275, "w": 85, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 25, "w": 85, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 182, "y": 274, "w": 87, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 27, "w": 87, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 384, "y": 264, "w": 91, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 29, "w": 91, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 96, "y": 215, "w": 95, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 29, "w": 95, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 0, "y": 121, "w": 98, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 27, "w": 98, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 69, "w": 101, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 26, "w": 101, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 551, "y": 61, "w": 104, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 25, "w": 104, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 101, "y": 111, "w": 102, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 23, "w": 102, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 551, "y": 112, "w": 99, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 20, "w": 99, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 193, "y": 172, "w": 97, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 19, "w": 97, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 191, "y": 223, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 17, "w": 94, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 557, "y": 266, "w": 89, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 17, "w": 89, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 373, "y": 315, "w": 84, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 19, "w": 84, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 655, "y": 61, "w": 79, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 21, "w": 79, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 85, "y": 317, "w": 81, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 23, "w": 81, "h": 49 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 0, "y": 275, "w": 85, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 25, "w": 85, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 182, "y": 274, "w": 87, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 27, "w": 87, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 384, "y": 264, "w": 91, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 29, "w": 91, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 96, "y": 215, "w": 95, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 29, "w": 95, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 0, "y": 121, "w": 98, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 27, "w": 98, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 69, "w": 101, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 26, "w": 101, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 551, "y": 61, "w": 104, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 25, "w": 104, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 101, "y": 111, "w": 102, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 23, "w": 102, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 551, "y": 112, "w": 99, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 20, "w": 99, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 193, "y": 172, "w": 97, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 19, "w": 97, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 191, "y": 223, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 17, "w": 94, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 557, "y": 266, "w": 89, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 17, "w": 89, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 373, "y": 315, "w": 84, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 19, "w": 84, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 655, "y": 61, "w": 79, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 21, "w": 79, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 85, "y": 317, "w": 81, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 23, "w": 81, "h": 49 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 0, "y": 275, "w": 85, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 25, "w": 85, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 182, "y": 274, "w": 87, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 27, "w": 87, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 384, "y": 264, "w": 91, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 29, "w": 91, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 96, "y": 215, "w": 95, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 29, "w": 95, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 0, "y": 121, "w": 98, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 27, "w": 98, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 0, "y": 69, "w": 101, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 26, "w": 101, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 551, "y": 61, "w": 104, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 25, "w": 104, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 101, "y": 111, "w": 102, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 23, "w": 102, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 551, "y": 112, "w": 99, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 20, "w": 99, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 193, "y": 172, "w": 97, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 19, "w": 97, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 191, "y": 223, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 17, "w": 94, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 557, "y": 266, "w": 89, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 17, "w": 89, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 373, "y": 315, "w": 84, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 19, "w": 84, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 655, "y": 61, "w": 79, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 21, "w": 79, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 85, "y": 317, "w": 81, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 23, "w": 81, "h": 49 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 0, "y": 275, "w": 85, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 25, "w": 85, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 182, "y": 274, "w": 87, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 27, "w": 87, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 384, "y": 264, "w": 91, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 29, "w": 91, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 96, "y": 215, "w": 95, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 29, "w": 95, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 121, "w": 98, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 27, "w": 98, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 0, "y": 69, "w": 101, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 26, "w": 101, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 551, "y": 61, "w": 104, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 25, "w": 104, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 101, "y": 111, "w": 102, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 23, "w": 102, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 551, "y": 112, "w": 99, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 20, "w": 99, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 193, "y": 172, "w": 97, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 19, "w": 97, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 191, "y": 223, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 17, "w": 94, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 378, "y": 113, "w": 100, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 16, "w": 100, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 187, "y": 60, "w": 105, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 15, "w": 105, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 594, "y": 164, "w": 97, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 12, "w": 97, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 285, "y": 270, "w": 88, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 9, "w": 88, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 92, "y": 266, "w": 90, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 6, "w": 90, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 0, "y": 224, "w": 92, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 5, "w": 92, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 290, "y": 219, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 94, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 98, "y": 162, "w": 95, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 95, "h": 53 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 284, "y": 0, "w": 94, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 1, "w": 94, "h": 60 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 0, "y": 0, "w": 92, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 0, "w": 92, "h": 69 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 378, "y": 0, "w": 84, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 2, "w": 84, "h": 67 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 652, "y": 0, "w": 77, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 35, "y": 9, "w": 77, "h": 61 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 292, "y": 60, "w": 86, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 8, "w": 86, "h": 62 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 92, "y": 0, "w": 95, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 4, "w": 95, "h": 66 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 564, "y": 0, "w": 88, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 9, "w": 88, "h": 61 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 475, "y": 264, "w": 82, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 38, "y": 15, "w": 82, "h": 56 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 462, "y": 53, "w": 89, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 32, "y": 11, "w": 89, "h": 60 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 187, "y": 0, "w": 97, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 12, "w": 97, "h": 59 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 304, "y": 164, "w": 91, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 16, "w": 91, "h": 55 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 650, "y": 112, "w": 83, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 17, "w": 83, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 646, "y": 266, "w": 89, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 18, "w": 89, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 0, "y": 173, "w": 96, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 17, "w": 96, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 462, "y": 0, "w": 102, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 16, "w": 102, "h": 53 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 203, "y": 122, "w": 101, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 19, "w": 101, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 395, "y": 164, "w": 100, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 18, "w": 100, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 495, "y": 164, "w": 99, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 18, "w": 99, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 395, "y": 214, "w": 97, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 18, "w": 97, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 492, "y": 214, "w": 97, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 18, "w": 97, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 589, "y": 215, "w": 95, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 17, "w": 95, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "902-female.png", + "format": "I8", + "size": { "w": 735, "h": 366 }, + "scale": "1", + "frameTags": [ + ], + "layers": [ + { "name": "Layer", "opacity": 255, "blendMode": "normal" } + ], + "slices": [ + ] + } } diff --git a/public/images/pokemon/back/902-female.png b/public/images/pokemon/back/902-female.png index cf712db1bb1..461b0f8eb5b 100644 Binary files a/public/images/pokemon/back/902-female.png and b/public/images/pokemon/back/902-female.png differ diff --git a/public/images/pokemon/back/902.json b/public/images/pokemon/back/902.json index 93163c5901f..86e3aa58a6b 100644 --- a/public/images/pokemon/back/902.json +++ b/public/images/pokemon/back/902.json @@ -1,41 +1,828 @@ -{ - "textures": [ - { - "image": "902.png", - "format": "RGBA8888", - "size": { - "w": 93, - "h": 93 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 51 - }, - "frame": { - "x": 0, - "y": 0, - "w": 93, - "h": 51 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:7dcfb504a17b21b9077b0e9ed894638f:307359f55cd4e00cfa07600a8711515b:7d196ae78ad956c5eb9131e145b5922f$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 387, "y": 270, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 17, "w": 94, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 452, "y": 322, "w": 89, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 17, "w": 89, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 328, "w": 84, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 19, "w": 84, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 556, "y": 62, "w": 73, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 34, "y": 21, "w": 73, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 105, "y": 67, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 23, "w": 81, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 273, "y": 327, "w": 85, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 25, "w": 85, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 172, "y": 329, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 27, "w": 80, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 94, "y": 274, "w": 91, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 29, "w": 91, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 96, "y": 223, "w": 95, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 29, "w": 95, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 273, "y": 275, "w": 89, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 27, "w": 89, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 121, "w": 101, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 26, "w": 101, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 454, "y": 115, "w": 104, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 25, "w": 104, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 481, "y": 271, "w": 92, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 23, "w": 92, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 101, "y": 121, "w": 99, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 20, "w": 99, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 397, "y": 219, "w": 97, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 19, "w": 97, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 387, "y": 270, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 17, "w": 94, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 452, "y": 322, "w": 89, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 17, "w": 89, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 328, "w": 84, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 19, "w": 84, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 556, "y": 62, "w": 73, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 34, "y": 21, "w": 73, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 105, "y": 67, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 23, "w": 81, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 273, "y": 327, "w": 85, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 25, "w": 85, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 172, "y": 329, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 27, "w": 80, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 94, "y": 274, "w": 91, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 29, "w": 91, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 96, "y": 223, "w": 95, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 29, "w": 95, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 273, "y": 275, "w": 89, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 27, "w": 89, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 121, "w": 101, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 26, "w": 101, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 454, "y": 115, "w": 104, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 25, "w": 104, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 481, "y": 271, "w": 92, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 23, "w": 92, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 101, "y": 121, "w": 99, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 20, "w": 99, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 397, "y": 219, "w": 97, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 19, "w": 97, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 387, "y": 270, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 17, "w": 94, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 452, "y": 322, "w": 89, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 17, "w": 89, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 0, "y": 328, "w": 84, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 19, "w": 84, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 556, "y": 62, "w": 73, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 34, "y": 21, "w": 73, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 105, "y": 67, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 23, "w": 81, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 273, "y": 327, "w": 85, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 25, "w": 85, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 172, "y": 329, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 27, "w": 80, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 94, "y": 274, "w": 91, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 29, "w": 91, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 96, "y": 223, "w": 95, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 29, "w": 95, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 273, "y": 275, "w": 89, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 27, "w": 89, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 0, "y": 121, "w": 101, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 26, "w": 101, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 454, "y": 115, "w": 104, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 25, "w": 104, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 481, "y": 271, "w": 92, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 23, "w": 92, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 101, "y": 121, "w": 99, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 20, "w": 99, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 397, "y": 219, "w": 97, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 19, "w": 97, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 387, "y": 270, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 17, "w": 94, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 452, "y": 322, "w": 89, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 17, "w": 89, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 0, "y": 328, "w": 84, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 19, "w": 84, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 556, "y": 62, "w": 73, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 34, "y": 21, "w": 73, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 105, "y": 67, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 23, "w": 81, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 273, "y": 327, "w": 85, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 25, "w": 85, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 172, "y": 329, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 27, "w": 80, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 94, "y": 274, "w": 91, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 29, "w": 91, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 96, "y": 223, "w": 95, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 29, "w": 95, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 273, "y": 275, "w": 89, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 27, "w": 89, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 0, "y": 121, "w": 101, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 26, "w": 101, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 454, "y": 115, "w": 104, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 25, "w": 104, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 481, "y": 271, "w": 92, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 23, "w": 92, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 101, "y": 121, "w": 99, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 20, "w": 99, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 397, "y": 219, "w": 97, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 19, "w": 97, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 387, "y": 270, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 17, "w": 94, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 200, "y": 121, "w": 100, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 16, "w": 100, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 0, "y": 70, "w": 105, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 15, "w": 105, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 300, "y": 173, "w": 97, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 12, "w": 97, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 541, "y": 322, "w": 88, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 9, "w": 88, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 362, "y": 321, "w": 90, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 6, "w": 90, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 276, "y": 68, "w": 92, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 5, "w": 92, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 0, "y": 225, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 94, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 401, "y": 166, "w": 95, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 95, "h": 53 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 368, "y": 0, "w": 94, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 1, "w": 94, "h": 60 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 0, "y": 0, "w": 92, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 0, "w": 92, "h": 70 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 284, "y": 0, "w": 84, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 2, "w": 84, "h": 68 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 550, "y": 0, "w": 77, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 35, "y": 9, "w": 77, "h": 62 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 368, "y": 60, "w": 86, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 8, "w": 86, "h": 63 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 92, "y": 0, "w": 95, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 4, "w": 95, "h": 67 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 462, "y": 0, "w": 88, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 9, "w": 88, "h": 62 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 191, "y": 272, "w": 82, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 38, "y": 15, "w": 82, "h": 57 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 187, "y": 60, "w": 89, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 32, "y": 11, "w": 89, "h": 61 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 187, "y": 0, "w": 97, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 12, "w": 97, "h": 60 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 496, "y": 166, "w": 91, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 16, "w": 91, "h": 55 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 89, "y": 325, "w": 83, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 17, "w": 83, "h": 53 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 0, "y": 276, "w": 89, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 18, "w": 89, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 0, "y": 173, "w": 96, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 17, "w": 96, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 454, "y": 62, "w": 102, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 16, "w": 102, "h": 53 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 300, "y": 123, "w": 101, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 19, "w": 101, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 200, "y": 172, "w": 100, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 18, "w": 100, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 96, "y": 173, "w": 99, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 18, "w": 99, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 494, "y": 221, "w": 97, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 18, "w": 97, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 195, "y": 222, "w": 97, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 18, "w": 97, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 292, "y": 224, "w": 95, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 17, "w": 95, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "902.png", + "format": "I8", + "size": { "w": 629, "h": 379 }, + "scale": "1", + "frameTags": [ + ], + "layers": [ + { "name": "Layer", "opacity": 255, "blendMode": "normal" } + ], + "slices": [ + ] + } } diff --git a/public/images/pokemon/back/902.png b/public/images/pokemon/back/902.png index bd39d3d358f..81e467ba8c6 100644 Binary files a/public/images/pokemon/back/902.png and b/public/images/pokemon/back/902.png differ diff --git a/public/images/pokemon/back/shiny/550-white-striped.json b/public/images/pokemon/back/shiny/550-white-striped.json index 55318e150ca..31b34514ddf 100644 --- a/public/images/pokemon/back/shiny/550-white-striped.json +++ b/public/images/pokemon/back/shiny/550-white-striped.json @@ -1,41 +1,810 @@ -{ - "textures": [ - { - "image": "550-white-striped.png", - "format": "RGBA8888", - "size": { - "w": 39, - "h": 39 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 39, - "h": 37 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 39, - "h": 37 - }, - "frame": { - "x": 0, - "y": 0, - "w": 39, - "h": 37 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:4db779392d12b8e76b7aa57abd1f74fc:e057c494c9088a5906ee1c1e70c16684:f97864a794849ea9866466461e0e9a7f$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 80, "y": 111, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 40, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 159, "y": 111, "w": 38, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 38, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 185, "y": 148, "w": 36, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 36, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 36, "y": 185, "w": 34, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 4, "w": 34, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 104, "y": 185, "w": 33, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 5, "w": 33, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 137, "y": 185, "w": 33, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 5, "w": 33, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 70, "y": 185, "w": 34, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 4, "w": 34, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 253, "y": 37, "w": 35, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 35, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 0, "y": 185, "w": 36, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 36, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 221, "y": 148, "w": 36, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 36, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 148, "w": 37, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 37, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 197, "y": 111, "w": 38, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 38, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 120, "y": 111, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 39, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 249, "y": 74, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 39, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 84, "y": 74, "w": 42, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 42, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 185, "y": 0, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 44, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 48, "y": 0, "w": 46, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 46, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 0, "w": 48, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 48, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 94, "y": 0, "w": 46, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 46, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 140, "y": 0, "w": 45, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 45, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 229, "y": 0, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 44, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 0, "y": 37, "w": 43, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 43, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 42, "y": 74, "w": 42, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 42, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 208, "y": 74, "w": 41, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 41, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 80, "y": 111, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 40, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 159, "y": 111, "w": 38, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 38, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 185, "y": 148, "w": 36, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 36, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 36, "y": 185, "w": 34, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 4, "w": 34, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 104, "y": 185, "w": 33, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 5, "w": 33, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 137, "y": 185, "w": 33, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 5, "w": 33, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 70, "y": 185, "w": 34, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 4, "w": 34, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 253, "y": 37, "w": 35, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 35, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 0, "y": 185, "w": 36, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 36, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 221, "y": 148, "w": 36, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 36, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 0, "y": 148, "w": 37, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 37, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 197, "y": 111, "w": 38, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 38, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 120, "y": 111, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 39, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 249, "y": 74, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 39, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 84, "y": 74, "w": 42, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 42, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 185, "y": 0, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 44, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 48, "y": 0, "w": 46, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 46, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 0, "y": 0, "w": 48, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 48, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 94, "y": 0, "w": 46, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 46, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 140, "y": 0, "w": 45, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 45, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 229, "y": 0, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 44, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 0, "y": 37, "w": 43, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 43, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 42, "y": 74, "w": 42, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 42, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 208, "y": 74, "w": 41, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 41, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 80, "y": 111, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 40, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 159, "y": 111, "w": 38, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 38, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 185, "y": 148, "w": 36, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 36, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 36, "y": 185, "w": 34, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 4, "w": 34, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 104, "y": 185, "w": 33, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 5, "w": 33, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 137, "y": 185, "w": 33, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 5, "w": 33, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 70, "y": 185, "w": 34, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 4, "w": 34, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 253, "y": 37, "w": 35, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 35, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 0, "y": 185, "w": 36, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 36, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 221, "y": 148, "w": 36, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 36, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 0, "y": 148, "w": 37, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 37, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 197, "y": 111, "w": 38, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 38, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 120, "y": 111, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 39, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 249, "y": 74, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 39, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 84, "y": 74, "w": 42, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 42, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 185, "y": 0, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 44, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 48, "y": 0, "w": 46, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 46, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 0, "y": 0, "w": 48, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 48, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 94, "y": 0, "w": 46, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 46, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 140, "y": 0, "w": 45, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 45, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 229, "y": 0, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 44, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 0, "y": 37, "w": 43, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 43, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 42, "y": 74, "w": 42, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 42, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 208, "y": 74, "w": 41, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 41, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 80, "y": 111, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 40, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 235, "y": 111, "w": 37, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 1, "w": 37, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 0, "y": 74, "w": 42, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 42, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 37, "y": 148, "w": 37, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 37, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 211, "y": 37, "w": 42, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 42, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 74, "y": 148, "w": 37, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 1, "w": 37, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 169, "y": 37, "w": 42, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 1, "w": 42, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 111, "y": 148, "w": 37, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 0, "w": 37, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 127, "y": 37, "w": 42, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 0, "w": 42, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 0, "y": 111, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 0, "w": 40, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 148, "y": 148, "w": 37, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 0, "w": 37, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 40, "y": 111, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 0, "w": 40, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 85, "y": 37, "w": 42, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 1, "w": 42, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 43, "y": 37, "w": 42, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 42, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 126, "y": 74, "w": 41, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 41, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 167, "y": 74, "w": 41, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 41, "h": 37 }, + "sourceSize": { "w": 56, "h": 42 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "550-white-striped.png", + "format": "I8", + "size": { "w": 288, "h": 222 }, + "scale": "1", + "frameTags": [ + ], + "layers": [ + { "name": "Layer", "opacity": 255, "blendMode": "normal" } + ], + "slices": [ + ] + } } diff --git a/public/images/pokemon/back/shiny/550-white-striped.png b/public/images/pokemon/back/shiny/550-white-striped.png index bf207678b3b..5505bad84a3 100644 Binary files a/public/images/pokemon/back/shiny/550-white-striped.png and b/public/images/pokemon/back/shiny/550-white-striped.png differ diff --git a/public/images/pokemon/back/shiny/769.json b/public/images/pokemon/back/shiny/769.json index 15ba07dd305..f786bd9e384 100644 --- a/public/images/pokemon/back/shiny/769.json +++ b/public/images/pokemon/back/shiny/769.json @@ -1,41 +1,423 @@ -{ - "textures": [ - { - "image": "769.png", - "format": "RGBA8888", - "size": { - "w": 54, - "h": 54 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 54, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 54, - "h": 46 - }, - "frame": { - "x": 0, - "y": 0, - "w": 54, - "h": 46 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:5b11631172a11bf407d37e79923fb804:8c939d90f16d785e49b25d082399edd3:ba2e5a01352778ce94d84746368de8fc$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 215, "y": 47, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 215, "y": 47, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 0, "w": 54, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 54, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 217, "y": 0, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 162, "y": 46, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 215, "y": 47, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 215, "y": 47, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 0, "w": 54, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 54, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 217, "y": 0, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 162, "y": 46, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 215, "y": 47, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 330 + }, + { + "filename": "0012.png", + "frame": { "x": 215, "y": 47, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0013.png", + "frame": { "x": 0, "y": 0, "w": 54, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 54, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0014.png", + "frame": { "x": 217, "y": 0, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0015.png", + "frame": { "x": 162, "y": 46, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0016.png", + "frame": { "x": 215, "y": 47, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0017.png", + "frame": { "x": 215, "y": 47, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 0, "w": 54, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 54, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0019.png", + "frame": { "x": 217, "y": 0, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0020.png", + "frame": { "x": 162, "y": 46, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0021.png", + "frame": { "x": 215, "y": 47, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 330 + }, + { + "filename": "0022.png", + "frame": { "x": 215, "y": 47, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0023.png", + "frame": { "x": 162, "y": 0, "w": 55, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 55, "h": 46 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0024.png", + "frame": { "x": 213, "y": 93, "w": 62, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 10, "w": 62, "h": 39 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0025.png", + "frame": { "x": 73, "y": 94, "w": 71, "h": 26 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 25, "w": 71, "h": 26 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 94, "w": 73, "h": 26 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 26, "w": 73, "h": 26 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 770 + }, + { + "filename": "0027.png", + "frame": { "x": 0, "y": 94, "w": 73, "h": 26 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 26, "w": 73, "h": 26 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0028.png", + "frame": { "x": 73, "y": 94, "w": 71, "h": 26 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 25, "w": 71, "h": 26 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0029.png", + "frame": { "x": 213, "y": 93, "w": 62, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 10, "w": 62, "h": 39 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0030.png", + "frame": { "x": 162, "y": 0, "w": 55, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 55, "h": 46 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0031.png", + "frame": { "x": 215, "y": 47, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0032.png", + "frame": { "x": 215, "y": 47, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0033.png", + "frame": { "x": 0, "y": 0, "w": 54, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 54, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0034.png", + "frame": { "x": 217, "y": 0, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0035.png", + "frame": { "x": 162, "y": 46, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0036.png", + "frame": { "x": 215, "y": 47, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 330 + }, + { + "filename": "0037.png", + "frame": { "x": 215, "y": 47, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0038.png", + "frame": { "x": 54, "y": 0, "w": 54, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 54, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0039.png", + "frame": { "x": 0, "y": 47, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0040.png", + "frame": { "x": 53, "y": 47, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0041.png", + "frame": { "x": 159, "y": 93, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0042.png", + "frame": { "x": 159, "y": 93, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0043.png", + "frame": { "x": 108, "y": 0, "w": 54, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 54, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0044.png", + "frame": { "x": 0, "y": 47, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + }, + { + "filename": "0045.png", + "frame": { "x": 106, "y": 47, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 73, "h": 52 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "769.png", + "format": "I8", + "size": { "w": 275, "h": 139 }, + "scale": "1", + "frameTags": [ + ], + "layers": [ + { "name": "Layer", "opacity": 255, "blendMode": "normal" } + ], + "slices": [ + ] + } } diff --git a/public/images/pokemon/back/shiny/769.png b/public/images/pokemon/back/shiny/769.png index 9456d8a5d2a..e12708648b0 100644 Binary files a/public/images/pokemon/back/shiny/769.png and b/public/images/pokemon/back/shiny/769.png differ diff --git a/public/images/pokemon/back/shiny/770.json b/public/images/pokemon/back/shiny/770.json index de5e829e988..d67a4c4a08e 100644 --- a/public/images/pokemon/back/shiny/770.json +++ b/public/images/pokemon/back/shiny/770.json @@ -1,41 +1,594 @@ -{ - "textures": [ - { - "image": "770.png", - "format": "RGBA8888", - "size": { - "w": 76, - "h": 76 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 76, - "h": 57 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 57 - }, - "frame": { - "x": 0, - "y": 0, - "w": 76, - "h": 57 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:5047614193ea2d34b6c0d942027f7139:9bd2fcf2c80fe475fa8e7894edbebe6a:9a5e6a86eb0697afa19bc4a32f422cc1$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 111, "w": 76, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 76, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 482, "y": 57, "w": 78, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 78, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 242, "y": 55, "w": 80, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 80, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 78, "y": 54, "w": 82, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 82, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 0, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 84, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 168, "y": 0, "w": 82, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 82, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 332, "y": 0, "w": 80, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 80, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 492, "y": 0, "w": 78, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 78, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 0, "y": 111, "w": 76, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 76, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 482, "y": 57, "w": 78, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 78, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 242, "y": 55, "w": 80, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 80, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 78, "y": 54, "w": 82, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 82, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0013.png", + "frame": { "x": 0, "y": 0, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 84, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0014.png", + "frame": { "x": 168, "y": 0, "w": 82, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 82, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0015.png", + "frame": { "x": 332, "y": 0, "w": 80, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 80, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0016.png", + "frame": { "x": 492, "y": 0, "w": 78, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 78, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 111, "w": 76, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 76, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0018.png", + "frame": { "x": 482, "y": 57, "w": 78, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 78, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0019.png", + "frame": { "x": 242, "y": 55, "w": 80, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 80, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0020.png", + "frame": { "x": 160, "y": 55, "w": 82, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 82, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0021.png", + "frame": { "x": 84, "y": 0, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 84, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0022.png", + "frame": { "x": 250, "y": 0, "w": 82, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 82, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0023.png", + "frame": { "x": 412, "y": 0, "w": 80, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 80, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0024.png", + "frame": { "x": 0, "y": 54, "w": 78, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 78, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0025.png", + "frame": { "x": 312, "y": 111, "w": 76, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 76, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0026.png", + "frame": { "x": 78, "y": 108, "w": 78, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 78, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0027.png", + "frame": { "x": 242, "y": 55, "w": 80, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 80, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0028.png", + "frame": { "x": 78, "y": 54, "w": 82, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 82, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0029.png", + "frame": { "x": 0, "y": 0, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 84, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0030.png", + "frame": { "x": 168, "y": 0, "w": 82, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 82, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0031.png", + "frame": { "x": 332, "y": 0, "w": 80, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 80, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0032.png", + "frame": { "x": 492, "y": 0, "w": 78, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 78, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0033.png", + "frame": { "x": 0, "y": 111, "w": 76, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 76, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0034.png", + "frame": { "x": 482, "y": 57, "w": 78, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 78, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0035.png", + "frame": { "x": 242, "y": 55, "w": 80, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 80, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0036.png", + "frame": { "x": 78, "y": 54, "w": 82, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 82, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0037.png", + "frame": { "x": 0, "y": 0, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 84, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0038.png", + "frame": { "x": 168, "y": 0, "w": 82, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 82, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0039.png", + "frame": { "x": 332, "y": 0, "w": 80, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 80, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0040.png", + "frame": { "x": 492, "y": 0, "w": 78, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 78, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0041.png", + "frame": { "x": 0, "y": 111, "w": 76, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 76, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0042.png", + "frame": { "x": 482, "y": 57, "w": 78, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 78, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0043.png", + "frame": { "x": 242, "y": 55, "w": 80, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 80, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0044.png", + "frame": { "x": 78, "y": 54, "w": 82, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 82, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0045.png", + "frame": { "x": 0, "y": 0, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 84, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0046.png", + "frame": { "x": 168, "y": 0, "w": 82, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 82, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0047.png", + "frame": { "x": 332, "y": 0, "w": 80, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 80, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0048.png", + "frame": { "x": 492, "y": 0, "w": 78, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 78, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0049.png", + "frame": { "x": 0, "y": 111, "w": 76, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 76, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0050.png", + "frame": { "x": 156, "y": 109, "w": 78, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 78, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0051.png", + "frame": { "x": 322, "y": 56, "w": 80, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 80, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0052.png", + "frame": { "x": 464, "y": 113, "w": 83, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 7, "w": 83, "h": 50 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0053.png", + "frame": { "x": 76, "y": 165, "w": 90, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 14, "w": 90, "h": 43 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0054.png", + "frame": { "x": 256, "y": 168, "w": 96, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 96, "h": 37 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0055.png", + "frame": { "x": 352, "y": 168, "w": 96, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 96, "h": 37 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0056.png", + "frame": { "x": 256, "y": 205, "w": 96, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 96, "h": 37 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0057.png", + "frame": { "x": 352, "y": 205, "w": 96, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 96, "h": 37 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0058.png", + "frame": { "x": 256, "y": 205, "w": 96, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 96, "h": 37 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0059.png", + "frame": { "x": 352, "y": 168, "w": 96, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 96, "h": 37 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0060.png", + "frame": { "x": 166, "y": 166, "w": 90, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 14, "w": 90, "h": 43 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0061.png", + "frame": { "x": 464, "y": 163, "w": 83, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 7, "w": 83, "h": 50 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0062.png", + "frame": { "x": 402, "y": 56, "w": 80, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 80, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0063.png", + "frame": { "x": 234, "y": 110, "w": 78, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 78, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0064.png", + "frame": { "x": 388, "y": 111, "w": 76, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 76, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "770.png", + "format": "I8", + "size": { "w": 570, "h": 242 }, + "scale": "1", + "frameTags": [ + ], + "layers": [ + { "name": "Layer", "opacity": 255, "blendMode": "normal" } + ], + "slices": [ + ] + } } diff --git a/public/images/pokemon/back/shiny/770.png b/public/images/pokemon/back/shiny/770.png index f1d6258ca58..116d7d29ea4 100644 Binary files a/public/images/pokemon/back/shiny/770.png and b/public/images/pokemon/back/shiny/770.png differ diff --git a/public/images/pokemon/back/shiny/843.json b/public/images/pokemon/back/shiny/843.json index ba4d298a104..3ce1db1c3d0 100644 --- a/public/images/pokemon/back/shiny/843.json +++ b/public/images/pokemon/back/shiny/843.json @@ -1,41 +1,648 @@ -{ - "textures": [ - { - "image": "843.png", - "format": "RGBA8888", - "size": { - "w": 45, - "h": 45 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 45, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 41 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 41 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:7280b11a32b2f1c742e8b6c61ac5ccf5:b69623fe0f8031f13c3e58cf12771a19:1ad579f7e215608104284deec571c282$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 183, "y": 126, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 0, "y": 127, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 228, "y": 163, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 273, "y": 163, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 45, "y": 165, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 44, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 46, "y": 123, "w": 45, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 45, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 142, "y": 84, "w": 46, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 46, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 200, "y": 42, "w": 47, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 47, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 154, "y": 41, "w": 46, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 43 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 188, "y": 84, "w": 46, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 42, "w": 46, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 43 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 0, "y": 85, "w": 46, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 91, "y": 164, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 183, "y": 126, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 0, "y": 127, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 228, "y": 163, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 273, "y": 163, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 45, "y": 165, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 44, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 46, "y": 123, "w": 45, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 45, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 142, "y": 84, "w": 46, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 46, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 200, "y": 42, "w": 47, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 47, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 154, "y": 41, "w": 46, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 43 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 188, "y": 84, "w": 46, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 0, "y": 42, "w": 46, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 43 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 0, "y": 85, "w": 46, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 91, "y": 164, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 183, "y": 126, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 0, "y": 127, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 228, "y": 163, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 273, "y": 163, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 45, "y": 165, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 44, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 46, "y": 123, "w": 45, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 45, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 142, "y": 84, "w": 46, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 46, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 200, "y": 42, "w": 47, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 47, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 154, "y": 41, "w": 46, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 43 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 188, "y": 84, "w": 46, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 0, "y": 42, "w": 46, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 43 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 0, "y": 85, "w": 46, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 91, "y": 164, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 183, "y": 126, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 0, "y": 127, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 228, "y": 163, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 273, "y": 163, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 45, "y": 165, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 44, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 46, "y": 123, "w": 45, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 45, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 142, "y": 84, "w": 46, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 46, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 200, "y": 42, "w": 47, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 47, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 154, "y": 41, "w": 46, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 43 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 188, "y": 84, "w": 46, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 0, "y": 42, "w": 46, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 43 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 0, "y": 85, "w": 46, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 91, "y": 164, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 183, "y": 126, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 45, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 57, "y": 40, "w": 48, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 48, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 225, "y": 0, "w": 51, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 51, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 171, "y": 0, "w": 54, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 54, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 0, "y": 0, "w": 57, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 57, "h": 42 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 57, "y": 0, "w": 59, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 59, "h": 40 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 116, "y": 0, "w": 55, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 55, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 276, "y": 0, "w": 52, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 52, "h": 40 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 276, "y": 40, "w": 49, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 49, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 105, "y": 41, "w": 49, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 49, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 247, "y": 81, "w": 48, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 48, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 295, "y": 81, "w": 48, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 48, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 46, "y": 82, "w": 48, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 48, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 94, "y": 82, "w": 48, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 48, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 234, "y": 122, "w": 47, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 47, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 281, "y": 122, "w": 47, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 47, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 91, "y": 123, "w": 46, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 46, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 137, "y": 126, "w": 46, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 46, "h": 41 }, + "sourceSize": { "w": 59, "h": 43 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "843.png", + "format": "I8", + "size": { "w": 343, "h": 206 }, + "scale": "1", + "frameTags": [ + ], + "layers": [ + { "name": "Layer", "opacity": 255, "blendMode": "normal" } + ], + "slices": [ + ] + } } diff --git a/public/images/pokemon/back/shiny/843.png b/public/images/pokemon/back/shiny/843.png index 7afd1a3e11a..83a1291b237 100644 Binary files a/public/images/pokemon/back/shiny/843.png and b/public/images/pokemon/back/shiny/843.png differ diff --git a/public/images/pokemon/back/shiny/844.json b/public/images/pokemon/back/shiny/844.json index 980f37bffb5..cb865a1c931 100644 --- a/public/images/pokemon/back/shiny/844.json +++ b/public/images/pokemon/back/shiny/844.json @@ -1,41 +1,1584 @@ -{ - "textures": [ - { - "image": "844.png", - "format": "RGBA8888", - "size": { - "w": 80, - "h": 80 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 80, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 50 - }, - "frame": { - "x": 0, - "y": 0, - "w": 80, - "h": 50 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:9957be291aca7db3d27e4953d7babf84:15a00446903fa475c7dd1aaf687132ad:791c04bd94958ea464eaa02b1a2ef466$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 81, "y": 151, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 80, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0002.png", + "frame": { "x": 81, "y": 151, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 80, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0003.png", + "frame": { "x": 413, "y": 0, "w": 81, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 81, "h": 51 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0004.png", + "frame": { "x": 413, "y": 0, "w": 81, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 81, "h": 51 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 0, "w": 82, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 82, "h": 52 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 0, "w": 82, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 82, "h": 52 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0007.png", + "frame": { "x": 82, "y": 0, "w": 82, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 82, "h": 51 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0008.png", + "frame": { "x": 82, "y": 0, "w": 82, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 82, "h": 51 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0009.png", + "frame": { "x": 246, "y": 50, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0010.png", + "frame": { "x": 246, "y": 50, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0011.png", + "frame": { "x": 328, "y": 50, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0012.png", + "frame": { "x": 82, "y": 51, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0013.png", + "frame": { "x": 82, "y": 51, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0014.png", + "frame": { "x": 410, "y": 51, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0015.png", + "frame": { "x": 0, "y": 52, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 52, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0017.png", + "frame": { "x": 164, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0018.png", + "frame": { "x": 164, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0019.png", + "frame": { "x": 81, "y": 151, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 80, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 250 + }, + { + "filename": "0020.png", + "frame": { "x": 81, "y": 151, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 80, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0021.png", + "frame": { "x": 246, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0022.png", + "frame": { "x": 246, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0023.png", + "frame": { "x": 247, "y": 0, "w": 83, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 83, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0024.png", + "frame": { "x": 247, "y": 0, "w": 83, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 83, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0025.png", + "frame": { "x": 328, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0026.png", + "frame": { "x": 328, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0027.png", + "frame": { "x": 410, "y": 51, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0028.png", + "frame": { "x": 82, "y": 101, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0029.png", + "frame": { "x": 82, "y": 101, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0030.png", + "frame": { "x": 330, "y": 0, "w": 83, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0031.png", + "frame": { "x": 164, "y": 0, "w": 83, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0032.png", + "frame": { "x": 164, "y": 50, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0033.png", + "frame": { "x": 410, "y": 101, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0034.png", + "frame": { "x": 245, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0035.png", + "frame": { "x": 245, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0036.png", + "frame": { "x": 326, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0037.png", + "frame": { "x": 326, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0038.png", + "frame": { "x": 81, "y": 151, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 80, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 250 + }, + { + "filename": "0039.png", + "frame": { "x": 81, "y": 151, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 80, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0040.png", + "frame": { "x": 413, "y": 0, "w": 81, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 81, "h": 51 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0041.png", + "frame": { "x": 413, "y": 0, "w": 81, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 81, "h": 51 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0042.png", + "frame": { "x": 0, "y": 0, "w": 82, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 82, "h": 52 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0043.png", + "frame": { "x": 0, "y": 0, "w": 82, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 82, "h": 52 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0044.png", + "frame": { "x": 82, "y": 0, "w": 82, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 82, "h": 51 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0045.png", + "frame": { "x": 82, "y": 0, "w": 82, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 82, "h": 51 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0046.png", + "frame": { "x": 246, "y": 50, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0047.png", + "frame": { "x": 246, "y": 50, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0048.png", + "frame": { "x": 328, "y": 50, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0049.png", + "frame": { "x": 82, "y": 51, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0050.png", + "frame": { "x": 82, "y": 51, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0051.png", + "frame": { "x": 410, "y": 51, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0052.png", + "frame": { "x": 0, "y": 52, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0053.png", + "frame": { "x": 0, "y": 52, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0054.png", + "frame": { "x": 164, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0055.png", + "frame": { "x": 164, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0056.png", + "frame": { "x": 81, "y": 151, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 80, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 250 + }, + { + "filename": "0057.png", + "frame": { "x": 81, "y": 151, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 80, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0058.png", + "frame": { "x": 246, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0059.png", + "frame": { "x": 246, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0060.png", + "frame": { "x": 247, "y": 0, "w": 83, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 83, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0061.png", + "frame": { "x": 247, "y": 0, "w": 83, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 83, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0062.png", + "frame": { "x": 328, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0063.png", + "frame": { "x": 328, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0064.png", + "frame": { "x": 410, "y": 51, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0065.png", + "frame": { "x": 82, "y": 101, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0066.png", + "frame": { "x": 82, "y": 101, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0067.png", + "frame": { "x": 330, "y": 0, "w": 83, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0068.png", + "frame": { "x": 164, "y": 0, "w": 83, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0069.png", + "frame": { "x": 164, "y": 50, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0070.png", + "frame": { "x": 410, "y": 101, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0071.png", + "frame": { "x": 245, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0072.png", + "frame": { "x": 245, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0073.png", + "frame": { "x": 326, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0074.png", + "frame": { "x": 326, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0075.png", + "frame": { "x": 81, "y": 151, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 80, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 250 + }, + { + "filename": "0076.png", + "frame": { "x": 81, "y": 151, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 80, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0077.png", + "frame": { "x": 413, "y": 0, "w": 81, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 81, "h": 51 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0078.png", + "frame": { "x": 413, "y": 0, "w": 81, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 81, "h": 51 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0079.png", + "frame": { "x": 0, "y": 0, "w": 82, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 82, "h": 52 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0080.png", + "frame": { "x": 0, "y": 0, "w": 82, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 82, "h": 52 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0081.png", + "frame": { "x": 82, "y": 0, "w": 82, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 82, "h": 51 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0082.png", + "frame": { "x": 82, "y": 0, "w": 82, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 82, "h": 51 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0083.png", + "frame": { "x": 246, "y": 50, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0084.png", + "frame": { "x": 246, "y": 50, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0085.png", + "frame": { "x": 328, "y": 50, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0086.png", + "frame": { "x": 82, "y": 51, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0087.png", + "frame": { "x": 82, "y": 51, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0088.png", + "frame": { "x": 410, "y": 51, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0089.png", + "frame": { "x": 0, "y": 52, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0090.png", + "frame": { "x": 0, "y": 52, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0091.png", + "frame": { "x": 164, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0092.png", + "frame": { "x": 164, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0093.png", + "frame": { "x": 81, "y": 151, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 80, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 250 + }, + { + "filename": "0094.png", + "frame": { "x": 81, "y": 151, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 80, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0095.png", + "frame": { "x": 246, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0096.png", + "frame": { "x": 246, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0097.png", + "frame": { "x": 247, "y": 0, "w": 83, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 83, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0098.png", + "frame": { "x": 247, "y": 0, "w": 83, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 83, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0099.png", + "frame": { "x": 328, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0100.png", + "frame": { "x": 328, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0101.png", + "frame": { "x": 410, "y": 51, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0102.png", + "frame": { "x": 82, "y": 101, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0103.png", + "frame": { "x": 82, "y": 101, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0104.png", + "frame": { "x": 330, "y": 0, "w": 83, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0105.png", + "frame": { "x": 164, "y": 0, "w": 83, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0106.png", + "frame": { "x": 164, "y": 50, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0107.png", + "frame": { "x": 410, "y": 101, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0108.png", + "frame": { "x": 245, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0109.png", + "frame": { "x": 245, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0110.png", + "frame": { "x": 326, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0111.png", + "frame": { "x": 326, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0112.png", + "frame": { "x": 81, "y": 151, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 80, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 250 + }, + { + "filename": "0113.png", + "frame": { "x": 81, "y": 151, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 80, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0114.png", + "frame": { "x": 413, "y": 0, "w": 81, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 81, "h": 51 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0115.png", + "frame": { "x": 413, "y": 0, "w": 81, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 81, "h": 51 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0116.png", + "frame": { "x": 0, "y": 0, "w": 82, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 82, "h": 52 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0117.png", + "frame": { "x": 0, "y": 0, "w": 82, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 82, "h": 52 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0118.png", + "frame": { "x": 82, "y": 0, "w": 82, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 82, "h": 51 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0119.png", + "frame": { "x": 82, "y": 0, "w": 82, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 82, "h": 51 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0120.png", + "frame": { "x": 246, "y": 50, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0121.png", + "frame": { "x": 246, "y": 50, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0122.png", + "frame": { "x": 328, "y": 50, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0123.png", + "frame": { "x": 82, "y": 51, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0124.png", + "frame": { "x": 82, "y": 51, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0125.png", + "frame": { "x": 410, "y": 51, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0126.png", + "frame": { "x": 0, "y": 52, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0127.png", + "frame": { "x": 0, "y": 52, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0128.png", + "frame": { "x": 164, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0129.png", + "frame": { "x": 164, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0130.png", + "frame": { "x": 81, "y": 151, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 80, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 250 + }, + { + "filename": "0131.png", + "frame": { "x": 81, "y": 151, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 80, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0132.png", + "frame": { "x": 246, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0133.png", + "frame": { "x": 246, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0134.png", + "frame": { "x": 247, "y": 0, "w": 83, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 83, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0135.png", + "frame": { "x": 247, "y": 0, "w": 83, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 83, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0136.png", + "frame": { "x": 328, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0137.png", + "frame": { "x": 328, "y": 100, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0138.png", + "frame": { "x": 410, "y": 51, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0139.png", + "frame": { "x": 82, "y": 101, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0140.png", + "frame": { "x": 82, "y": 101, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0141.png", + "frame": { "x": 330, "y": 0, "w": 83, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0142.png", + "frame": { "x": 164, "y": 0, "w": 83, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0143.png", + "frame": { "x": 164, "y": 50, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0144.png", + "frame": { "x": 410, "y": 101, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0145.png", + "frame": { "x": 245, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0146.png", + "frame": { "x": 245, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0147.png", + "frame": { "x": 326, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0148.png", + "frame": { "x": 326, "y": 150, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0149.png", + "frame": { "x": 81, "y": 151, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 80, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 350 + }, + { + "filename": "0150.png", + "frame": { "x": 81, "y": 151, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 80, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0151.png", + "frame": { "x": 407, "y": 151, "w": 79, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 79, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 100 + }, + { + "filename": "0152.png", + "frame": { "x": 407, "y": 151, "w": 79, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 79, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0153.png", + "frame": { "x": 161, "y": 200, "w": 77, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 77, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0154.png", + "frame": { "x": 161, "y": 200, "w": 77, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 77, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0155.png", + "frame": { "x": 307, "y": 200, "w": 75, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 75, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0156.png", + "frame": { "x": 307, "y": 200, "w": 75, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 75, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0157.png", + "frame": { "x": 382, "y": 201, "w": 74, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 74, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0158.png", + "frame": { "x": 382, "y": 201, "w": 74, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 74, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0159.png", + "frame": { "x": 143, "y": 250, "w": 72, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 72, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 150 + }, + { + "filename": "0160.png", + "frame": { "x": 143, "y": 250, "w": 72, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 72, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0161.png", + "frame": { "x": 376, "y": 251, "w": 70, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 70, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 250 + }, + { + "filename": "0162.png", + "frame": { "x": 376, "y": 251, "w": 70, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 70, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0163.png", + "frame": { "x": 69, "y": 255, "w": 69, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 69, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 400 + }, + { + "filename": "0164.png", + "frame": { "x": 69, "y": 255, "w": 69, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 69, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0165.png", + "frame": { "x": 307, "y": 250, "w": 69, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 69, "h": 51 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0166.png", + "frame": { "x": 0, "y": 205, "w": 69, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 69, "h": 53 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0167.png", + "frame": { "x": 74, "y": 201, "w": 69, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 69, "h": 54 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0168.png", + "frame": { "x": 238, "y": 200, "w": 69, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 69, "h": 55 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0169.png", + "frame": { "x": 0, "y": 152, "w": 74, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 74, "h": 53 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0170.png", + "frame": { "x": 410, "y": 101, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0171.png", + "frame": { "x": 410, "y": 101, "w": 82, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 82, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0172.png", + "frame": { "x": 0, "y": 102, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0173.png", + "frame": { "x": 0, "y": 102, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 81, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 50 + }, + { + "filename": "0174.png", + "frame": { "x": 81, "y": 151, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 80, "h": 50 }, + "sourceSize": { "w": 84, "h": 56 }, + "duration": 300 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "844.png", + "format": "I8", + "size": { "w": 494, "h": 305 }, + "scale": "1", + "frameTags": [ + ], + "layers": [ + { "name": "Layer", "opacity": 255, "blendMode": "normal" } + ], + "slices": [ + ] + } } diff --git a/public/images/pokemon/back/shiny/844.png b/public/images/pokemon/back/shiny/844.png index ec989e1b39c..5865c85812e 100644 Binary files a/public/images/pokemon/back/shiny/844.png and b/public/images/pokemon/back/shiny/844.png differ diff --git a/public/images/pokemon/back/shiny/902-female.json b/public/images/pokemon/back/shiny/902-female.json index e992404f37c..7b8355ef84d 100644 --- a/public/images/pokemon/back/shiny/902-female.json +++ b/public/images/pokemon/back/shiny/902-female.json @@ -1,41 +1,828 @@ -{ - "textures": [ - { - "image": "902-female.png", - "format": "RGBA8888", - "size": { - "w": 93, - "h": 93 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 51 - }, - "frame": { - "x": 0, - "y": 0, - "w": 93, - "h": 51 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:9b7366ec94c9143ff1591f296b453b43:4b1bcaf81ee72fa92aaa6604f851862c:16072dc598107c41afadd9df4d7c27da$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 191, "y": 223, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 17, "w": 94, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 557, "y": 266, "w": 89, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 17, "w": 89, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 373, "y": 315, "w": 84, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 19, "w": 84, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 655, "y": 61, "w": 79, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 21, "w": 79, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 85, "y": 317, "w": 81, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 23, "w": 81, "h": 49 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 275, "w": 85, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 25, "w": 85, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 182, "y": 274, "w": 87, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 27, "w": 87, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 384, "y": 264, "w": 91, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 29, "w": 91, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 96, "y": 215, "w": 95, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 29, "w": 95, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 0, "y": 121, "w": 98, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 27, "w": 98, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 69, "w": 101, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 26, "w": 101, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 551, "y": 61, "w": 104, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 25, "w": 104, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 101, "y": 111, "w": 102, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 23, "w": 102, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 551, "y": 112, "w": 99, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 20, "w": 99, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 193, "y": 172, "w": 97, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 19, "w": 97, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 191, "y": 223, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 17, "w": 94, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 557, "y": 266, "w": 89, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 17, "w": 89, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 373, "y": 315, "w": 84, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 19, "w": 84, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 655, "y": 61, "w": 79, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 21, "w": 79, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 85, "y": 317, "w": 81, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 23, "w": 81, "h": 49 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 0, "y": 275, "w": 85, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 25, "w": 85, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 182, "y": 274, "w": 87, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 27, "w": 87, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 384, "y": 264, "w": 91, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 29, "w": 91, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 96, "y": 215, "w": 95, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 29, "w": 95, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 0, "y": 121, "w": 98, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 27, "w": 98, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 69, "w": 101, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 26, "w": 101, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 551, "y": 61, "w": 104, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 25, "w": 104, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 101, "y": 111, "w": 102, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 23, "w": 102, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 551, "y": 112, "w": 99, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 20, "w": 99, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 193, "y": 172, "w": 97, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 19, "w": 97, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 191, "y": 223, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 17, "w": 94, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 557, "y": 266, "w": 89, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 17, "w": 89, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 373, "y": 315, "w": 84, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 19, "w": 84, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 655, "y": 61, "w": 79, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 21, "w": 79, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 85, "y": 317, "w": 81, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 23, "w": 81, "h": 49 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 0, "y": 275, "w": 85, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 25, "w": 85, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 182, "y": 274, "w": 87, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 27, "w": 87, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 384, "y": 264, "w": 91, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 29, "w": 91, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 96, "y": 215, "w": 95, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 29, "w": 95, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 0, "y": 121, "w": 98, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 27, "w": 98, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 0, "y": 69, "w": 101, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 26, "w": 101, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 551, "y": 61, "w": 104, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 25, "w": 104, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 101, "y": 111, "w": 102, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 23, "w": 102, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 551, "y": 112, "w": 99, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 20, "w": 99, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 193, "y": 172, "w": 97, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 19, "w": 97, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 191, "y": 223, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 17, "w": 94, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 557, "y": 266, "w": 89, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 17, "w": 89, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 373, "y": 315, "w": 84, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 19, "w": 84, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 655, "y": 61, "w": 79, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 21, "w": 79, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 85, "y": 317, "w": 81, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 23, "w": 81, "h": 49 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 0, "y": 275, "w": 85, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 25, "w": 85, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 182, "y": 274, "w": 87, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 27, "w": 87, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 384, "y": 264, "w": 91, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 29, "w": 91, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 96, "y": 215, "w": 95, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 29, "w": 95, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 121, "w": 98, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 27, "w": 98, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 0, "y": 69, "w": 101, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 26, "w": 101, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 551, "y": 61, "w": 104, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 25, "w": 104, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 101, "y": 111, "w": 102, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 23, "w": 102, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 551, "y": 112, "w": 99, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 20, "w": 99, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 193, "y": 172, "w": 97, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 19, "w": 97, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 191, "y": 223, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 17, "w": 94, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 378, "y": 113, "w": 100, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 16, "w": 100, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 187, "y": 60, "w": 105, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 15, "w": 105, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 594, "y": 164, "w": 97, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 12, "w": 97, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 285, "y": 270, "w": 88, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 9, "w": 88, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 92, "y": 266, "w": 90, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 6, "w": 90, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 0, "y": 224, "w": 92, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 5, "w": 92, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 290, "y": 219, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 94, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 98, "y": 162, "w": 95, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 95, "h": 53 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 284, "y": 0, "w": 94, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 1, "w": 94, "h": 60 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 0, "y": 0, "w": 92, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 0, "w": 92, "h": 69 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 378, "y": 0, "w": 84, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 2, "w": 84, "h": 67 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 652, "y": 0, "w": 77, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 35, "y": 9, "w": 77, "h": 61 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 292, "y": 60, "w": 86, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 8, "w": 86, "h": 62 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 92, "y": 0, "w": 95, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 4, "w": 95, "h": 66 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 564, "y": 0, "w": 88, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 9, "w": 88, "h": 61 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 475, "y": 264, "w": 82, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 38, "y": 15, "w": 82, "h": 56 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 462, "y": 53, "w": 89, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 32, "y": 11, "w": 89, "h": 60 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 187, "y": 0, "w": 97, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 12, "w": 97, "h": 59 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 304, "y": 164, "w": 91, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 16, "w": 91, "h": 55 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 650, "y": 112, "w": 83, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 17, "w": 83, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 646, "y": 266, "w": 89, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 18, "w": 89, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 0, "y": 173, "w": 96, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 17, "w": 96, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 462, "y": 0, "w": 102, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 16, "w": 102, "h": 53 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 203, "y": 122, "w": 101, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 19, "w": 101, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 395, "y": 164, "w": 100, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 18, "w": 100, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 495, "y": 164, "w": 99, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 18, "w": 99, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 395, "y": 214, "w": 97, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 18, "w": 97, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 492, "y": 214, "w": 97, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 18, "w": 97, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 589, "y": 215, "w": 95, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 17, "w": 95, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "902-female.png", + "format": "I8", + "size": { "w": 735, "h": 366 }, + "scale": "1", + "frameTags": [ + ], + "layers": [ + { "name": "Layer", "opacity": 255, "blendMode": "normal" } + ], + "slices": [ + ] + } } diff --git a/public/images/pokemon/back/shiny/902-female.png b/public/images/pokemon/back/shiny/902-female.png index fd7cb37f63d..6c849fa949f 100644 Binary files a/public/images/pokemon/back/shiny/902-female.png and b/public/images/pokemon/back/shiny/902-female.png differ diff --git a/public/images/pokemon/back/shiny/902.json b/public/images/pokemon/back/shiny/902.json index d44160577d0..86e3aa58a6b 100644 --- a/public/images/pokemon/back/shiny/902.json +++ b/public/images/pokemon/back/shiny/902.json @@ -1,41 +1,828 @@ -{ - "textures": [ - { - "image": "902.png", - "format": "RGBA8888", - "size": { - "w": 93, - "h": 93 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 51 - }, - "frame": { - "x": 0, - "y": 0, - "w": 93, - "h": 51 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:880c07ab105843316070670a0d6b3f8f:4073b95e414eb2d7430f1c59ed4c4cb7:7d196ae78ad956c5eb9131e145b5922f$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 387, "y": 270, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 17, "w": 94, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 452, "y": 322, "w": 89, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 17, "w": 89, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 328, "w": 84, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 19, "w": 84, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 556, "y": 62, "w": 73, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 34, "y": 21, "w": 73, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 105, "y": 67, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 23, "w": 81, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 273, "y": 327, "w": 85, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 25, "w": 85, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 172, "y": 329, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 27, "w": 80, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 94, "y": 274, "w": 91, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 29, "w": 91, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 96, "y": 223, "w": 95, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 29, "w": 95, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 273, "y": 275, "w": 89, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 27, "w": 89, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 121, "w": 101, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 26, "w": 101, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 454, "y": 115, "w": 104, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 25, "w": 104, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 481, "y": 271, "w": 92, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 23, "w": 92, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 101, "y": 121, "w": 99, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 20, "w": 99, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 397, "y": 219, "w": 97, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 19, "w": 97, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 387, "y": 270, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 17, "w": 94, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 452, "y": 322, "w": 89, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 17, "w": 89, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 328, "w": 84, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 19, "w": 84, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 556, "y": 62, "w": 73, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 34, "y": 21, "w": 73, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 105, "y": 67, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 23, "w": 81, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 273, "y": 327, "w": 85, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 25, "w": 85, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 172, "y": 329, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 27, "w": 80, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 94, "y": 274, "w": 91, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 29, "w": 91, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 96, "y": 223, "w": 95, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 29, "w": 95, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 273, "y": 275, "w": 89, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 27, "w": 89, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 121, "w": 101, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 26, "w": 101, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 454, "y": 115, "w": 104, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 25, "w": 104, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 481, "y": 271, "w": 92, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 23, "w": 92, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 101, "y": 121, "w": 99, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 20, "w": 99, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 397, "y": 219, "w": 97, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 19, "w": 97, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 387, "y": 270, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 17, "w": 94, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 452, "y": 322, "w": 89, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 17, "w": 89, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 0, "y": 328, "w": 84, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 19, "w": 84, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 556, "y": 62, "w": 73, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 34, "y": 21, "w": 73, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 105, "y": 67, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 23, "w": 81, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 273, "y": 327, "w": 85, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 25, "w": 85, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 172, "y": 329, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 27, "w": 80, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 94, "y": 274, "w": 91, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 29, "w": 91, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 96, "y": 223, "w": 95, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 29, "w": 95, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 273, "y": 275, "w": 89, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 27, "w": 89, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 0, "y": 121, "w": 101, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 26, "w": 101, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 454, "y": 115, "w": 104, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 25, "w": 104, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 481, "y": 271, "w": 92, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 23, "w": 92, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 101, "y": 121, "w": 99, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 20, "w": 99, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 397, "y": 219, "w": 97, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 19, "w": 97, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 387, "y": 270, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 17, "w": 94, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 452, "y": 322, "w": 89, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 17, "w": 89, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 0, "y": 328, "w": 84, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 19, "w": 84, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 556, "y": 62, "w": 73, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 34, "y": 21, "w": 73, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 105, "y": 67, "w": 81, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 23, "w": 81, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 273, "y": 327, "w": 85, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 25, "w": 85, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 172, "y": 329, "w": 80, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 27, "w": 80, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 94, "y": 274, "w": 91, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 29, "w": 91, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 96, "y": 223, "w": 95, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 29, "w": 95, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 273, "y": 275, "w": 89, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 27, "w": 89, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 0, "y": 121, "w": 101, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 26, "w": 101, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 454, "y": 115, "w": 104, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 25, "w": 104, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 481, "y": 271, "w": 92, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 23, "w": 92, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 101, "y": 121, "w": 99, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 20, "w": 99, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 397, "y": 219, "w": 97, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 19, "w": 97, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 387, "y": 270, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 17, "w": 94, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 200, "y": 121, "w": 100, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 16, "w": 100, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 0, "y": 70, "w": 105, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 15, "w": 105, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 300, "y": 173, "w": 97, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 12, "w": 97, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 541, "y": 322, "w": 88, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 9, "w": 88, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 362, "y": 321, "w": 90, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 6, "w": 90, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 276, "y": 68, "w": 92, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 5, "w": 92, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 0, "y": 225, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 94, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 401, "y": 166, "w": 95, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 95, "h": 53 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 368, "y": 0, "w": 94, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 1, "w": 94, "h": 60 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 0, "y": 0, "w": 92, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 0, "w": 92, "h": 70 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 284, "y": 0, "w": 84, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 2, "w": 84, "h": 68 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 550, "y": 0, "w": 77, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 35, "y": 9, "w": 77, "h": 62 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 368, "y": 60, "w": 86, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 8, "w": 86, "h": 63 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 92, "y": 0, "w": 95, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 4, "w": 95, "h": 67 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 462, "y": 0, "w": 88, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 9, "w": 88, "h": 62 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 191, "y": 272, "w": 82, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 38, "y": 15, "w": 82, "h": 57 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 187, "y": 60, "w": 89, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 32, "y": 11, "w": 89, "h": 61 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 187, "y": 0, "w": 97, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 12, "w": 97, "h": 60 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 496, "y": 166, "w": 91, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 16, "w": 91, "h": 55 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 89, "y": 325, "w": 83, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 17, "w": 83, "h": 53 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 0, "y": 276, "w": 89, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 18, "w": 89, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 0, "y": 173, "w": 96, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 17, "w": 96, "h": 52 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 454, "y": 62, "w": 102, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 16, "w": 102, "h": 53 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 300, "y": 123, "w": 101, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 19, "w": 101, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 200, "y": 172, "w": 100, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 18, "w": 100, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 96, "y": 173, "w": 99, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 18, "w": 99, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 494, "y": 221, "w": 97, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 18, "w": 97, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 195, "y": 222, "w": 97, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 18, "w": 97, "h": 50 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 292, "y": 224, "w": 95, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 17, "w": 95, "h": 51 }, + "sourceSize": { "w": 122, "h": 80 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "902.png", + "format": "I8", + "size": { "w": 629, "h": 379 }, + "scale": "1", + "frameTags": [ + ], + "layers": [ + { "name": "Layer", "opacity": 255, "blendMode": "normal" } + ], + "slices": [ + ] + } } diff --git a/public/images/pokemon/back/shiny/902.png b/public/images/pokemon/back/shiny/902.png index 0e624cf367a..e6fb00524dd 100644 Binary files a/public/images/pokemon/back/shiny/902.png and b/public/images/pokemon/back/shiny/902.png differ diff --git a/public/images/pokemon/exp/769.json b/public/images/pokemon/exp/769.json deleted file mode 100644 index 7fd6b616151..00000000000 --- a/public/images/pokemon/exp/769.json +++ /dev/null @@ -1,965 +0,0 @@ -{ - "textures": [ - { - "image": "769.png", - "format": "RGBA8888", - "size": { - "w": 222, - "h": 222 - }, - "scale": 1, - "frames": [ - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 61, - "h": 46 - }, - "frame": { - "x": 0, - "y": 0, - "w": 61, - "h": 46 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 61, - "h": 46 - }, - "frame": { - "x": 0, - "y": 0, - "w": 61, - "h": 46 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 57, - "h": 48 - }, - "frame": { - "x": 61, - "y": 0, - "w": 57, - "h": 48 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 57, - "h": 48 - }, - "frame": { - "x": 61, - "y": 0, - "w": 57, - "h": 48 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 46, - "w": 56, - "h": 48 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 46, - "w": 56, - "h": 48 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 46, - "w": 56, - "h": 48 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 46, - "w": 56, - "h": 48 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 46, - "w": 56, - "h": 48 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 46, - "w": 56, - "h": 48 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 46, - "w": 56, - "h": 48 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 46, - "w": 56, - "h": 48 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 46, - "w": 56, - "h": 48 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 46, - "w": 56, - "h": 48 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 46, - "w": 56, - "h": 48 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 46, - "w": 56, - "h": 48 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 46, - "w": 56, - "h": 48 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 118, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 118, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 118, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 118, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 118, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 94, - "w": 56, - "h": 48 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 142, - "w": 56, - "h": 48 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 21, - "w": 65, - "h": 32 - }, - "frame": { - "x": 0, - "y": 190, - "w": 65, - "h": 32 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 21, - "w": 65, - "h": 32 - }, - "frame": { - "x": 0, - "y": 190, - "w": 65, - "h": 32 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 56, - "y": 48, - "w": 56, - "h": 48 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 56, - "y": 48, - "w": 56, - "h": 48 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 56, - "y": 96, - "w": 56, - "h": 48 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 20, - "w": 65, - "h": 33 - }, - "frame": { - "x": 56, - "y": 144, - "w": 65, - "h": 33 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 20, - "w": 65, - "h": 33 - }, - "frame": { - "x": 56, - "y": 144, - "w": 65, - "h": 33 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 112, - "y": 48, - "w": 55, - "h": 48 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 112, - "y": 48, - "w": 55, - "h": 48 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 112, - "y": 48, - "w": 55, - "h": 48 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 112, - "y": 48, - "w": 55, - "h": 48 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 112, - "y": 48, - "w": 55, - "h": 48 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 112, - "y": 96, - "w": 55, - "h": 48 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 112, - "y": 96, - "w": 55, - "h": 48 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 112, - "y": 96, - "w": 55, - "h": 48 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 112, - "y": 96, - "w": 55, - "h": 48 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 112, - "y": 96, - "w": 55, - "h": 48 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 121, - "y": 144, - "w": 55, - "h": 48 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 121, - "y": 144, - "w": 55, - "h": 48 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 167, - "y": 48, - "w": 55, - "h": 48 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 167, - "y": 96, - "w": 55, - "h": 48 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:417ae469c35cea609c584c0e7ca094eb:6458f627018b9ddb6f2fbc2096c1b150:ba2e5a01352778ce94d84746368de8fc$" - } -} diff --git a/public/images/pokemon/exp/769.png b/public/images/pokemon/exp/769.png deleted file mode 100644 index 5e41fea7682..00000000000 Binary files a/public/images/pokemon/exp/769.png and /dev/null differ diff --git a/public/images/pokemon/exp/770.json b/public/images/pokemon/exp/770.json deleted file mode 100644 index 1b68b54db41..00000000000 --- a/public/images/pokemon/exp/770.json +++ /dev/null @@ -1,1364 +0,0 @@ -{ - "textures": [ - { - "image": "770.png", - "format": "RGBA8888", - "size": { - "w": 375, - "h": 375 - }, - "scale": 1, - "frames": [ - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 87, - "h": 55 - }, - "frame": { - "x": 0, - "y": 0, - "w": 87, - "h": 55 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 87, - "h": 55 - }, - "frame": { - "x": 0, - "y": 0, - "w": 87, - "h": 55 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 87, - "h": 55 - }, - "frame": { - "x": 0, - "y": 0, - "w": 87, - "h": 55 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 87, - "h": 55 - }, - "frame": { - "x": 0, - "y": 0, - "w": 87, - "h": 55 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 87, - "h": 55 - }, - "frame": { - "x": 0, - "y": 0, - "w": 87, - "h": 55 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 87, - "h": 55 - }, - "frame": { - "x": 0, - "y": 55, - "w": 87, - "h": 55 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 1, - "w": 85, - "h": 56 - }, - "frame": { - "x": 87, - "y": 0, - "w": 85, - "h": 56 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 1, - "w": 85, - "h": 56 - }, - "frame": { - "x": 87, - "y": 0, - "w": 85, - "h": 56 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 1, - "w": 85, - "h": 56 - }, - "frame": { - "x": 87, - "y": 0, - "w": 85, - "h": 56 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 1, - "w": 85, - "h": 56 - }, - "frame": { - "x": 87, - "y": 0, - "w": 85, - "h": 56 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 1, - "w": 85, - "h": 56 - }, - "frame": { - "x": 87, - "y": 0, - "w": 85, - "h": 56 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 1, - "w": 85, - "h": 56 - }, - "frame": { - "x": 0, - "y": 110, - "w": 85, - "h": 56 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 85, - "h": 55 - }, - "frame": { - "x": 172, - "y": 0, - "w": 85, - "h": 55 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 85, - "h": 55 - }, - "frame": { - "x": 172, - "y": 0, - "w": 85, - "h": 55 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 85, - "h": 55 - }, - "frame": { - "x": 172, - "y": 0, - "w": 85, - "h": 55 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 85, - "h": 55 - }, - "frame": { - "x": 172, - "y": 0, - "w": 85, - "h": 55 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 85, - "h": 55 - }, - "frame": { - "x": 172, - "y": 0, - "w": 85, - "h": 55 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 85, - "h": 55 - }, - "frame": { - "x": 0, - "y": 166, - "w": 85, - "h": 55 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 82, - "h": 57 - }, - "frame": { - "x": 0, - "y": 221, - "w": 82, - "h": 57 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 82, - "h": 57 - }, - "frame": { - "x": 0, - "y": 221, - "w": 82, - "h": 57 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 82, - "h": 57 - }, - "frame": { - "x": 0, - "y": 221, - "w": 82, - "h": 57 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 82, - "h": 57 - }, - "frame": { - "x": 0, - "y": 221, - "w": 82, - "h": 57 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 82, - "h": 57 - }, - "frame": { - "x": 0, - "y": 221, - "w": 82, - "h": 57 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 82, - "h": 57 - }, - "frame": { - "x": 0, - "y": 278, - "w": 82, - "h": 57 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 82, - "h": 56 - }, - "frame": { - "x": 257, - "y": 0, - "w": 82, - "h": 56 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 82, - "h": 56 - }, - "frame": { - "x": 257, - "y": 0, - "w": 82, - "h": 56 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 82, - "h": 56 - }, - "frame": { - "x": 257, - "y": 0, - "w": 82, - "h": 56 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 82, - "h": 56 - }, - "frame": { - "x": 257, - "y": 0, - "w": 82, - "h": 56 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 82, - "h": 56 - }, - "frame": { - "x": 257, - "y": 0, - "w": 82, - "h": 56 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 82, - "h": 56 - }, - "frame": { - "x": 257, - "y": 0, - "w": 82, - "h": 56 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 82, - "h": 54 - }, - "frame": { - "x": 87, - "y": 56, - "w": 82, - "h": 54 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 85, - "y": 110, - "w": 80, - "h": 57 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 85, - "y": 110, - "w": 80, - "h": 57 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 85, - "y": 110, - "w": 80, - "h": 57 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 85, - "y": 110, - "w": 80, - "h": 57 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 85, - "y": 110, - "w": 80, - "h": 57 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 85, - "y": 167, - "w": 80, - "h": 57 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 85, - "y": 167, - "w": 80, - "h": 57 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 85, - "y": 167, - "w": 80, - "h": 57 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 85, - "y": 167, - "w": 80, - "h": 57 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 85, - "y": 167, - "w": 80, - "h": 57 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 82, - "y": 224, - "w": 80, - "h": 57 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 82, - "y": 281, - "w": 80, - "h": 57 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 0, - "y": 20, - "w": 96, - "h": 37 - }, - "frame": { - "x": 0, - "y": 338, - "w": 96, - "h": 37 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 0, - "y": 20, - "w": 96, - "h": 37 - }, - "frame": { - "x": 96, - "y": 338, - "w": 96, - "h": 37 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 0, - "y": 20, - "w": 96, - "h": 37 - }, - "frame": { - "x": 96, - "y": 338, - "w": 96, - "h": 37 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 9, - "w": 85, - "h": 48 - }, - "frame": { - "x": 172, - "y": 55, - "w": 85, - "h": 48 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 9, - "w": 85, - "h": 48 - }, - "frame": { - "x": 257, - "y": 56, - "w": 85, - "h": 48 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 82, - "h": 54 - }, - "frame": { - "x": 169, - "y": 103, - "w": 82, - "h": 54 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 165, - "y": 157, - "w": 80, - "h": 57 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 251, - "y": 104, - "w": 80, - "h": 57 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 78, - "h": 57 - }, - "frame": { - "x": 245, - "y": 161, - "w": 78, - "h": 57 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 78, - "h": 57 - }, - "frame": { - "x": 245, - "y": 161, - "w": 78, - "h": 57 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 78, - "h": 57 - }, - "frame": { - "x": 245, - "y": 161, - "w": 78, - "h": 57 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 78, - "h": 57 - }, - "frame": { - "x": 245, - "y": 161, - "w": 78, - "h": 57 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 78, - "h": 57 - }, - "frame": { - "x": 245, - "y": 161, - "w": 78, - "h": 57 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 78, - "h": 57 - }, - "frame": { - "x": 245, - "y": 161, - "w": 78, - "h": 57 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 78, - "h": 57 - }, - "frame": { - "x": 165, - "y": 214, - "w": 78, - "h": 57 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 78, - "h": 57 - }, - "frame": { - "x": 162, - "y": 271, - "w": 78, - "h": 57 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 2, - "y": 18, - "w": 92, - "h": 39 - }, - "frame": { - "x": 243, - "y": 218, - "w": 92, - "h": 39 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 0, - "y": 20, - "w": 96, - "h": 37 - }, - "frame": { - "x": 243, - "y": 257, - "w": 96, - "h": 37 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 0, - "y": 20, - "w": 96, - "h": 37 - }, - "frame": { - "x": 243, - "y": 257, - "w": 96, - "h": 37 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 0, - "y": 20, - "w": 96, - "h": 37 - }, - "frame": { - "x": 240, - "y": 294, - "w": 96, - "h": 37 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 2, - "y": 18, - "w": 92, - "h": 39 - }, - "frame": { - "x": 192, - "y": 331, - "w": 92, - "h": 39 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:ce33d806b6d3aeb64a87ace5887286f6:bf1c87696fd9940bcd542fd3d1696df1:9a5e6a86eb0697afa19bc4a32f422cc1$" - } -} diff --git a/public/images/pokemon/exp/770.png b/public/images/pokemon/exp/770.png deleted file mode 100644 index a5e91507aa7..00000000000 Binary files a/public/images/pokemon/exp/770.png and /dev/null differ diff --git a/public/images/pokemon/exp/843.json b/public/images/pokemon/exp/843.json deleted file mode 100644 index 06456db6386..00000000000 --- a/public/images/pokemon/exp/843.json +++ /dev/null @@ -1,272 +0,0 @@ -{ - "textures": [ - { - "image": "843.png", - "format": "RGBA8888", - "size": { - "w": 159, - "h": 159 - }, - "scale": 1, - "frames": [ - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 47, - "h": 41 - }, - "frame": { - "x": 0, - "y": 0, - "w": 47, - "h": 41 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 40 - }, - "frame": { - "x": 47, - "y": 0, - "w": 48, - "h": 40 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 40 - }, - "frame": { - "x": 95, - "y": 0, - "w": 48, - "h": 40 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 47, - "h": 41 - }, - "frame": { - "x": 0, - "y": 41, - "w": 47, - "h": 41 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 46, - "h": 41 - }, - "frame": { - "x": 47, - "y": 40, - "w": 46, - "h": 41 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 48, - "h": 39 - }, - "frame": { - "x": 93, - "y": 40, - "w": 48, - "h": 39 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 48, - "h": 39 - }, - "frame": { - "x": 93, - "y": 40, - "w": 48, - "h": 39 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 46, - "h": 41 - }, - "frame": { - "x": 0, - "y": 82, - "w": 46, - "h": 41 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 48, - "h": 39 - }, - "frame": { - "x": 93, - "y": 79, - "w": 48, - "h": 39 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 45, - "h": 41 - }, - "frame": { - "x": 46, - "y": 118, - "w": 45, - "h": 41 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 45, - "h": 41 - }, - "frame": { - "x": 46, - "y": 118, - "w": 45, - "h": 41 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 43, - "h": 41 - }, - "frame": { - "x": 91, - "y": 118, - "w": 43, - "h": 41 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:9312bae554a97f4e1cf7cd6a28ceabf6:1da73bda54fc1449f0690b5744fb330d:1ad579f7e215608104284deec571c282$" - } -} diff --git a/public/images/pokemon/exp/843.png b/public/images/pokemon/exp/843.png deleted file mode 100644 index 2e45524e26a..00000000000 Binary files a/public/images/pokemon/exp/843.png and /dev/null differ diff --git a/public/images/pokemon/exp/844.json b/public/images/pokemon/exp/844.json deleted file mode 100644 index a081ca549c5..00000000000 --- a/public/images/pokemon/exp/844.json +++ /dev/null @@ -1,314 +0,0 @@ -{ - "textures": [ - { - "image": "844.png", - "format": "RGBA8888", - "size": { - "w": 216, - "h": 216 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 54 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 86, - "h": 54 - }, - "frame": { - "x": 0, - "y": 0, - "w": 86, - "h": 54 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 54 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 86, - "h": 54 - }, - "frame": { - "x": 86, - "y": 0, - "w": 86, - "h": 54 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 54 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 86, - "h": 54 - }, - "frame": { - "x": 86, - "y": 0, - "w": 86, - "h": 54 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 54 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 86, - "h": 54 - }, - "frame": { - "x": 0, - "y": 54, - "w": 86, - "h": 54 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 54 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 86, - "h": 54 - }, - "frame": { - "x": 0, - "y": 54, - "w": 86, - "h": 54 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 54 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 85, - "h": 54 - }, - "frame": { - "x": 86, - "y": 54, - "w": 85, - "h": 54 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 54 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 85, - "h": 54 - }, - "frame": { - "x": 86, - "y": 54, - "w": 85, - "h": 54 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 54 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 84, - "h": 54 - }, - "frame": { - "x": 0, - "y": 108, - "w": 84, - "h": 54 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 54 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 84, - "h": 54 - }, - "frame": { - "x": 0, - "y": 108, - "w": 84, - "h": 54 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 54 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 84, - "h": 54 - }, - "frame": { - "x": 0, - "y": 162, - "w": 84, - "h": 54 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 54 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 84, - "h": 54 - }, - "frame": { - "x": 0, - "y": 162, - "w": 84, - "h": 54 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 54 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 82, - "h": 54 - }, - "frame": { - "x": 84, - "y": 108, - "w": 82, - "h": 54 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 54 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 82, - "h": 54 - }, - "frame": { - "x": 84, - "y": 108, - "w": 82, - "h": 54 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 54 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 81, - "h": 54 - }, - "frame": { - "x": 84, - "y": 162, - "w": 81, - "h": 54 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:477c3e24ed01f357b40b55a146886579:67027ad0ed80befaa15d0952f4fbaf01:791c04bd94958ea464eaa02b1a2ef466$" - } -} diff --git a/public/images/pokemon/exp/844.png b/public/images/pokemon/exp/844.png deleted file mode 100644 index bd138b7b6d8..00000000000 Binary files a/public/images/pokemon/exp/844.png and /dev/null differ diff --git a/public/images/pokemon/exp/902-female.json b/public/images/pokemon/exp/902-female.json deleted file mode 100644 index c9199ab17bb..00000000000 --- a/public/images/pokemon/exp/902-female.json +++ /dev/null @@ -1,1343 +0,0 @@ -{ - "textures": [ - { - "image": "902-female.png", - "format": "RGBA8888", - "size": { - "w": 256, - "h": 256 - }, - "scale": 1, - "frames": [ - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 87, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 87, - "h": 53 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 87, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 87, - "h": 53 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 87, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 87, - "h": 53 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 87, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 87, - "h": 53 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 87, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 87, - "h": 53 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 87, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 87, - "h": 53 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 89, - "h": 53 - }, - "frame": { - "x": 87, - "y": 0, - "w": 89, - "h": 53 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 89, - "h": 53 - }, - "frame": { - "x": 87, - "y": 0, - "w": 89, - "h": 53 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 89, - "h": 53 - }, - "frame": { - "x": 87, - "y": 0, - "w": 89, - "h": 53 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 89, - "h": 53 - }, - "frame": { - "x": 87, - "y": 0, - "w": 89, - "h": 53 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 89, - "h": 53 - }, - "frame": { - "x": 87, - "y": 0, - "w": 89, - "h": 53 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 89, - "h": 53 - }, - "frame": { - "x": 87, - "y": 0, - "w": 89, - "h": 53 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 89, - "h": 53 - }, - "frame": { - "x": 87, - "y": 0, - "w": 89, - "h": 53 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 89, - "h": 53 - }, - "frame": { - "x": 87, - "y": 0, - "w": 89, - "h": 53 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 78, - "h": 65 - }, - "frame": { - "x": 176, - "y": 0, - "w": 78, - "h": 65 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 78, - "h": 65 - }, - "frame": { - "x": 176, - "y": 0, - "w": 78, - "h": 65 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 78, - "h": 65 - }, - "frame": { - "x": 176, - "y": 0, - "w": 78, - "h": 65 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 78, - "h": 65 - }, - "frame": { - "x": 176, - "y": 0, - "w": 78, - "h": 65 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 78, - "h": 65 - }, - "frame": { - "x": 176, - "y": 0, - "w": 78, - "h": 65 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 78, - "h": 65 - }, - "frame": { - "x": 176, - "y": 0, - "w": 78, - "h": 65 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 78, - "h": 65 - }, - "frame": { - "x": 176, - "y": 0, - "w": 78, - "h": 65 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 91, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 91, - "h": 53 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 91, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 91, - "h": 53 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 91, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 91, - "h": 53 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 91, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 91, - "h": 53 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 91, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 91, - "h": 53 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 91, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 91, - "h": 53 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 91, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 91, - "h": 53 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 91, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 91, - "h": 53 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 84, - "h": 54 - }, - "frame": { - "x": 91, - "y": 53, - "w": 84, - "h": 54 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 84, - "h": 54 - }, - "frame": { - "x": 91, - "y": 53, - "w": 84, - "h": 54 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 84, - "h": 54 - }, - "frame": { - "x": 91, - "y": 53, - "w": 84, - "h": 54 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 84, - "h": 54 - }, - "frame": { - "x": 91, - "y": 53, - "w": 84, - "h": 54 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 84, - "h": 54 - }, - "frame": { - "x": 91, - "y": 53, - "w": 84, - "h": 54 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 84, - "h": 54 - }, - "frame": { - "x": 91, - "y": 53, - "w": 84, - "h": 54 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 84, - "h": 54 - }, - "frame": { - "x": 91, - "y": 53, - "w": 84, - "h": 54 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 84, - "h": 54 - }, - "frame": { - "x": 91, - "y": 53, - "w": 84, - "h": 54 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 81, - "h": 64 - }, - "frame": { - "x": 175, - "y": 65, - "w": 81, - "h": 64 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 81, - "h": 64 - }, - "frame": { - "x": 175, - "y": 65, - "w": 81, - "h": 64 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 87, - "h": 53 - }, - "frame": { - "x": 0, - "y": 106, - "w": 87, - "h": 53 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 87, - "h": 53 - }, - "frame": { - "x": 0, - "y": 106, - "w": 87, - "h": 53 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 83, - "h": 58 - }, - "frame": { - "x": 87, - "y": 107, - "w": 83, - "h": 58 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 83, - "h": 58 - }, - "frame": { - "x": 87, - "y": 107, - "w": 83, - "h": 58 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 83, - "h": 58 - }, - "frame": { - "x": 87, - "y": 107, - "w": 83, - "h": 58 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 83, - "h": 58 - }, - "frame": { - "x": 87, - "y": 107, - "w": 83, - "h": 58 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 83, - "h": 58 - }, - "frame": { - "x": 87, - "y": 107, - "w": 83, - "h": 58 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 83, - "h": 58 - }, - "frame": { - "x": 87, - "y": 107, - "w": 83, - "h": 58 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 83, - "h": 58 - }, - "frame": { - "x": 87, - "y": 107, - "w": 83, - "h": 58 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 83, - "h": 58 - }, - "frame": { - "x": 87, - "y": 107, - "w": 83, - "h": 58 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 81, - "h": 64 - }, - "frame": { - "x": 170, - "y": 129, - "w": 81, - "h": 64 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 81, - "h": 64 - }, - "frame": { - "x": 170, - "y": 129, - "w": 81, - "h": 64 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 92, - "h": 54 - }, - "frame": { - "x": 0, - "y": 165, - "w": 92, - "h": 54 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 92, - "h": 54 - }, - "frame": { - "x": 0, - "y": 165, - "w": 92, - "h": 54 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 92, - "h": 54 - }, - "frame": { - "x": 0, - "y": 165, - "w": 92, - "h": 54 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 92, - "h": 54 - }, - "frame": { - "x": 0, - "y": 165, - "w": 92, - "h": 54 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 92, - "h": 54 - }, - "frame": { - "x": 0, - "y": 165, - "w": 92, - "h": 54 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 92, - "h": 54 - }, - "frame": { - "x": 0, - "y": 165, - "w": 92, - "h": 54 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 92, - "h": 54 - }, - "frame": { - "x": 0, - "y": 165, - "w": 92, - "h": 54 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 92, - "h": 54 - }, - "frame": { - "x": 0, - "y": 165, - "w": 92, - "h": 54 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 94, - "h": 55 - }, - "frame": { - "x": 92, - "y": 193, - "w": 94, - "h": 55 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 94, - "h": 55 - }, - "frame": { - "x": 92, - "y": 193, - "w": 94, - "h": 55 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 94, - "h": 55 - }, - "frame": { - "x": 92, - "y": 193, - "w": 94, - "h": 55 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 94, - "h": 55 - }, - "frame": { - "x": 92, - "y": 193, - "w": 94, - "h": 55 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:115e187eb068c187d4e3d4e4716da67a:d0e3dc39bdcde2a96488e969c8b3f7f5:16072dc598107c41afadd9df4d7c27da$" - } -} diff --git a/public/images/pokemon/exp/902-female.png b/public/images/pokemon/exp/902-female.png deleted file mode 100644 index c1cb86ff3bf..00000000000 Binary files a/public/images/pokemon/exp/902-female.png and /dev/null differ diff --git a/public/images/pokemon/exp/902.json b/public/images/pokemon/exp/902.json deleted file mode 100644 index 03f5f82f2cf..00000000000 --- a/public/images/pokemon/exp/902.json +++ /dev/null @@ -1,1364 +0,0 @@ -{ - "textures": [ - { - "image": "902.png", - "format": "RGBA8888", - "size": { - "w": 256, - "h": 256 - }, - "scale": 1, - "frames": [ - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 88, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 88, - "h": 53 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 88, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 88, - "h": 53 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 88, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 88, - "h": 53 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 88, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 88, - "h": 53 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 88, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 88, - "h": 53 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 88, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 88, - "h": 53 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 88, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 88, - "h": 53 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 88, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 88, - "h": 53 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 91, - "h": 53 - }, - "frame": { - "x": 88, - "y": 0, - "w": 91, - "h": 53 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 91, - "h": 53 - }, - "frame": { - "x": 88, - "y": 0, - "w": 91, - "h": 53 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 91, - "h": 53 - }, - "frame": { - "x": 88, - "y": 0, - "w": 91, - "h": 53 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 91, - "h": 53 - }, - "frame": { - "x": 88, - "y": 0, - "w": 91, - "h": 53 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 77, - "h": 71 - }, - "frame": { - "x": 179, - "y": 0, - "w": 77, - "h": 71 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 77, - "h": 71 - }, - "frame": { - "x": 179, - "y": 0, - "w": 77, - "h": 71 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 77, - "h": 71 - }, - "frame": { - "x": 179, - "y": 0, - "w": 77, - "h": 71 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 77, - "h": 71 - }, - "frame": { - "x": 179, - "y": 0, - "w": 77, - "h": 71 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 88, - "h": 54 - }, - "frame": { - "x": 0, - "y": 53, - "w": 88, - "h": 54 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 88, - "h": 54 - }, - "frame": { - "x": 0, - "y": 53, - "w": 88, - "h": 54 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 88, - "h": 54 - }, - "frame": { - "x": 0, - "y": 53, - "w": 88, - "h": 54 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 88, - "h": 54 - }, - "frame": { - "x": 0, - "y": 53, - "w": 88, - "h": 54 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 88, - "h": 54 - }, - "frame": { - "x": 0, - "y": 53, - "w": 88, - "h": 54 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 88, - "h": 54 - }, - "frame": { - "x": 0, - "y": 53, - "w": 88, - "h": 54 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 88, - "h": 54 - }, - "frame": { - "x": 0, - "y": 53, - "w": 88, - "h": 54 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 88, - "h": 54 - }, - "frame": { - "x": 0, - "y": 53, - "w": 88, - "h": 54 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 88, - "h": 56 - }, - "frame": { - "x": 88, - "y": 53, - "w": 88, - "h": 56 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 88, - "h": 56 - }, - "frame": { - "x": 88, - "y": 53, - "w": 88, - "h": 56 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 88, - "h": 56 - }, - "frame": { - "x": 88, - "y": 53, - "w": 88, - "h": 56 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 88, - "h": 56 - }, - "frame": { - "x": 88, - "y": 53, - "w": 88, - "h": 56 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 88, - "h": 56 - }, - "frame": { - "x": 88, - "y": 53, - "w": 88, - "h": 56 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 88, - "h": 56 - }, - "frame": { - "x": 88, - "y": 53, - "w": 88, - "h": 56 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 88, - "h": 56 - }, - "frame": { - "x": 88, - "y": 53, - "w": 88, - "h": 56 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 88, - "h": 56 - }, - "frame": { - "x": 88, - "y": 53, - "w": 88, - "h": 56 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 92, - "h": 54 - }, - "frame": { - "x": 0, - "y": 109, - "w": 92, - "h": 54 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 92, - "h": 54 - }, - "frame": { - "x": 0, - "y": 109, - "w": 92, - "h": 54 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 92, - "h": 54 - }, - "frame": { - "x": 0, - "y": 109, - "w": 92, - "h": 54 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 92, - "h": 54 - }, - "frame": { - "x": 0, - "y": 109, - "w": 92, - "h": 54 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 92, - "h": 54 - }, - "frame": { - "x": 0, - "y": 109, - "w": 92, - "h": 54 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 92, - "h": 54 - }, - "frame": { - "x": 0, - "y": 109, - "w": 92, - "h": 54 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 92, - "h": 54 - }, - "frame": { - "x": 92, - "y": 109, - "w": 92, - "h": 54 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 92, - "h": 54 - }, - "frame": { - "x": 92, - "y": 109, - "w": 92, - "h": 54 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 86, - "h": 59 - }, - "frame": { - "x": 0, - "y": 163, - "w": 86, - "h": 59 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 86, - "h": 59 - }, - "frame": { - "x": 0, - "y": 163, - "w": 86, - "h": 59 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 86, - "h": 59 - }, - "frame": { - "x": 0, - "y": 163, - "w": 86, - "h": 59 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 86, - "h": 59 - }, - "frame": { - "x": 0, - "y": 163, - "w": 86, - "h": 59 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 86, - "h": 59 - }, - "frame": { - "x": 0, - "y": 163, - "w": 86, - "h": 59 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 86, - "h": 59 - }, - "frame": { - "x": 0, - "y": 163, - "w": 86, - "h": 59 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 86, - "h": 59 - }, - "frame": { - "x": 0, - "y": 163, - "w": 86, - "h": 59 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 86, - "h": 59 - }, - "frame": { - "x": 0, - "y": 163, - "w": 86, - "h": 59 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 86, - "h": 59 - }, - "frame": { - "x": 0, - "y": 163, - "w": 86, - "h": 59 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 83, - "h": 61 - }, - "frame": { - "x": 86, - "y": 163, - "w": 83, - "h": 61 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 83, - "h": 61 - }, - "frame": { - "x": 86, - "y": 163, - "w": 83, - "h": 61 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 83, - "h": 61 - }, - "frame": { - "x": 86, - "y": 163, - "w": 83, - "h": 61 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 83, - "h": 61 - }, - "frame": { - "x": 86, - "y": 163, - "w": 83, - "h": 61 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 83, - "h": 61 - }, - "frame": { - "x": 86, - "y": 163, - "w": 83, - "h": 61 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 83, - "h": 61 - }, - "frame": { - "x": 86, - "y": 163, - "w": 83, - "h": 61 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 83, - "h": 61 - }, - "frame": { - "x": 86, - "y": 163, - "w": 83, - "h": 61 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 81, - "h": 67 - }, - "frame": { - "x": 169, - "y": 163, - "w": 81, - "h": 67 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 81, - "h": 67 - }, - "frame": { - "x": 169, - "y": 163, - "w": 81, - "h": 67 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 81, - "h": 67 - }, - "frame": { - "x": 169, - "y": 163, - "w": 81, - "h": 67 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 81, - "h": 67 - }, - "frame": { - "x": 169, - "y": 163, - "w": 81, - "h": 67 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 81, - "h": 67 - }, - "frame": { - "x": 169, - "y": 163, - "w": 81, - "h": 67 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 81, - "h": 67 - }, - "frame": { - "x": 169, - "y": 163, - "w": 81, - "h": 67 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 81, - "h": 67 - }, - "frame": { - "x": 169, - "y": 163, - "w": 81, - "h": 67 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 81, - "h": 67 - }, - "frame": { - "x": 169, - "y": 163, - "w": 81, - "h": 67 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:632d7ea475140a78bc0f0fe0a237a81f:76d6a97a8838fd8d63e2c574059d7244:7d196ae78ad956c5eb9131e145b5922f$" - } -} diff --git a/public/images/pokemon/exp/902.png b/public/images/pokemon/exp/902.png deleted file mode 100644 index dc4d7117ca8..00000000000 Binary files a/public/images/pokemon/exp/902.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/769.json b/public/images/pokemon/exp/back/769.json deleted file mode 100644 index 41828e9c61f..00000000000 --- a/public/images/pokemon/exp/back/769.json +++ /dev/null @@ -1,965 +0,0 @@ -{ - "textures": [ - { - "image": "769.png", - "format": "RGBA8888", - "size": { - "w": 219, - "h": 219 - }, - "scale": 1, - "frames": [ - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 57, - "h": 48 - }, - "frame": { - "x": 0, - "y": 0, - "w": 57, - "h": 48 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 57, - "h": 48 - }, - "frame": { - "x": 0, - "y": 0, - "w": 57, - "h": 48 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 57, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 57, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 57, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 57, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 57, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 57, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 57, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 57, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 57, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 57, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 57, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 57, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 57, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 57, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 113, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 113, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 113, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 113, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 113, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 48, - "w": 56, - "h": 48 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 96, - "w": 56, - "h": 48 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 96, - "w": 56, - "h": 48 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 144, - "w": 56, - "h": 48 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 25, - "w": 73, - "h": 27 - }, - "frame": { - "x": 0, - "y": 192, - "w": 73, - "h": 27 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 25, - "w": 73, - "h": 27 - }, - "frame": { - "x": 0, - "y": 192, - "w": 73, - "h": 27 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 56, - "y": 48, - "w": 55, - "h": 48 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 56, - "y": 48, - "w": 55, - "h": 48 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 56, - "y": 48, - "w": 55, - "h": 48 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 56, - "y": 48, - "w": 55, - "h": 48 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 56, - "y": 48, - "w": 55, - "h": 48 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 56, - "y": 96, - "w": 55, - "h": 48 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 56, - "y": 96, - "w": 55, - "h": 48 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 56, - "y": 96, - "w": 55, - "h": 48 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 56, - "y": 96, - "w": 55, - "h": 48 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 56, - "y": 96, - "w": 55, - "h": 48 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 56, - "y": 144, - "w": 55, - "h": 48 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 56, - "y": 144, - "w": 55, - "h": 48 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 111, - "y": 48, - "w": 55, - "h": 48 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 111, - "y": 96, - "w": 55, - "h": 48 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 5, - "y": 9, - "w": 64, - "h": 41 - }, - "frame": { - "x": 111, - "y": 144, - "w": 64, - "h": 41 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 5, - "y": 9, - "w": 64, - "h": 41 - }, - "frame": { - "x": 111, - "y": 144, - "w": 64, - "h": 41 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 24, - "w": 73, - "h": 28 - }, - "frame": { - "x": 111, - "y": 185, - "w": 73, - "h": 28 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 24, - "w": 73, - "h": 28 - }, - "frame": { - "x": 111, - "y": 185, - "w": 73, - "h": 28 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:17e2413963cd5bd4a68ba8e469dfc190:227880ca0b7c52d6cb51957ab3a1be77:ba2e5a01352778ce94d84746368de8fc$" - } -} diff --git a/public/images/pokemon/exp/back/769.png b/public/images/pokemon/exp/back/769.png deleted file mode 100644 index bfd607cfc73..00000000000 Binary files a/public/images/pokemon/exp/back/769.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/770.json b/public/images/pokemon/exp/back/770.json deleted file mode 100644 index a34a15a289c..00000000000 --- a/public/images/pokemon/exp/back/770.json +++ /dev/null @@ -1,230 +0,0 @@ -{ - "textures": [ - { - "image": "770.png", - "format": "RGBA8888", - "size": { - "w": 191, - "h": 191 - }, - "scale": 1, - "frames": [ - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 89, - "h": 64 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 88, - "h": 64 - }, - "frame": { - "x": 0, - "y": 0, - "w": 88, - "h": 64 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 89, - "h": 64 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 88, - "h": 64 - }, - "frame": { - "x": 0, - "y": 0, - "w": 88, - "h": 64 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 89, - "h": 64 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 89, - "h": 63 - }, - "frame": { - "x": 0, - "y": 64, - "w": 89, - "h": 63 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 89, - "h": 64 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 89, - "h": 63 - }, - "frame": { - "x": 0, - "y": 64, - "w": 89, - "h": 63 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 89, - "h": 64 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 89, - "h": 61 - }, - "frame": { - "x": 88, - "y": 0, - "w": 89, - "h": 61 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 89, - "h": 64 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 88, - "h": 64 - }, - "frame": { - "x": 89, - "y": 61, - "w": 88, - "h": 64 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 89, - "h": 64 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 88, - "h": 64 - }, - "frame": { - "x": 89, - "y": 61, - "w": 88, - "h": 64 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 89, - "h": 64 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 87, - "h": 64 - }, - "frame": { - "x": 89, - "y": 125, - "w": 87, - "h": 64 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 89, - "h": 64 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 86, - "h": 64 - }, - "frame": { - "x": 0, - "y": 127, - "w": 86, - "h": 64 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 89, - "h": 64 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 86, - "h": 64 - }, - "frame": { - "x": 0, - "y": 127, - "w": 86, - "h": 64 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:437913a3fac6d9b2d11b7dc09b7d835f:94d3b6901d95203a26299fb484be5e9d:9a5e6a86eb0697afa19bc4a32f422cc1$" - } -} diff --git a/public/images/pokemon/exp/back/770.png b/public/images/pokemon/exp/back/770.png deleted file mode 100644 index e3d0bc64cbb..00000000000 Binary files a/public/images/pokemon/exp/back/770.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/843.json b/public/images/pokemon/exp/back/843.json deleted file mode 100644 index b81be0f5e96..00000000000 --- a/public/images/pokemon/exp/back/843.json +++ /dev/null @@ -1,230 +0,0 @@ -{ - "textures": [ - { - "image": "843.png", - "format": "RGBA8888", - "size": { - "w": 133, - "h": 133 - }, - "scale": 1, - "frames": [ - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 46 - }, - "frame": { - "x": 0, - "y": 0, - "w": 46, - "h": 46 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 46 - }, - "frame": { - "x": 0, - "y": 0, - "w": 46, - "h": 46 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 46 - }, - "frame": { - "x": 0, - "y": 46, - "w": 46, - "h": 46 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 46 - }, - "frame": { - "x": 0, - "y": 46, - "w": 46, - "h": 46 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 41 - }, - "frame": { - "x": 0, - "y": 92, - "w": 45, - "h": 41 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 46 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 46, - "h": 46 - }, - "frame": { - "x": 46, - "y": 0, - "w": 46, - "h": 46 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 46, - "h": 43 - }, - "frame": { - "x": 46, - "y": 46, - "w": 46, - "h": 43 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 46, - "h": 43 - }, - "frame": { - "x": 46, - "y": 46, - "w": 46, - "h": 43 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 42 - }, - "frame": { - "x": 46, - "y": 89, - "w": 45, - "h": 42 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 42 - }, - "frame": { - "x": 46, - "y": 89, - "w": 45, - "h": 42 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:7d4f6807020830ca248b07a70cc65564:a038fb69889659cec8a86a0a2c87caf9:1ad579f7e215608104284deec571c282$" - } -} diff --git a/public/images/pokemon/exp/back/843.png b/public/images/pokemon/exp/back/843.png deleted file mode 100644 index e83d4585b0c..00000000000 Binary files a/public/images/pokemon/exp/back/843.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/844.json b/public/images/pokemon/exp/back/844.json deleted file mode 100644 index 3842ea72251..00000000000 --- a/public/images/pokemon/exp/back/844.json +++ /dev/null @@ -1,230 +0,0 @@ -{ - "textures": [ - { - "image": "844.png", - "format": "RGBA8888", - "size": { - "w": 158, - "h": 158 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 80, - "h": 54 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 54 - }, - "frame": { - "x": 0, - "y": 0, - "w": 80, - "h": 54 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 80, - "h": 54 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 54 - }, - "frame": { - "x": 0, - "y": 0, - "w": 80, - "h": 54 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 54 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 78, - "h": 54 - }, - "frame": { - "x": 80, - "y": 0, - "w": 78, - "h": 54 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 54 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 80, - "h": 52 - }, - "frame": { - "x": 0, - "y": 54, - "w": 80, - "h": 52 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 54 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 80, - "h": 52 - }, - "frame": { - "x": 0, - "y": 54, - "w": 80, - "h": 52 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 54 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 78, - "h": 51 - }, - "frame": { - "x": 80, - "y": 54, - "w": 78, - "h": 51 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 54 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 78, - "h": 51 - }, - "frame": { - "x": 80, - "y": 54, - "w": 78, - "h": 51 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 54 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 51 - }, - "frame": { - "x": 0, - "y": 106, - "w": 76, - "h": 51 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 54 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 51 - }, - "frame": { - "x": 0, - "y": 106, - "w": 76, - "h": 51 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 54 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 74, - "h": 51 - }, - "frame": { - "x": 76, - "y": 106, - "w": 74, - "h": 51 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:9a8eaa95a1aa10ec56d71049f5970748:df23578a39b2aa0947e5b54998000c85:791c04bd94958ea464eaa02b1a2ef466$" - } -} diff --git a/public/images/pokemon/exp/back/844.png b/public/images/pokemon/exp/back/844.png deleted file mode 100644 index 46370c35b6c..00000000000 Binary files a/public/images/pokemon/exp/back/844.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/902-female.json b/public/images/pokemon/exp/back/902-female.json deleted file mode 100644 index 01ac8d32ff7..00000000000 --- a/public/images/pokemon/exp/back/902-female.json +++ /dev/null @@ -1,1133 +0,0 @@ -{ - "textures": [ - { - "image": "902-female.png", - "format": "RGBA8888", - "size": { - "w": 268, - "h": 268 - }, - "scale": 1, - "frames": [ - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 94, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 94, - "h": 53 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 94, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 94, - "h": 53 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 94, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 94, - "h": 53 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 94, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 94, - "h": 53 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 95, - "h": 52 - }, - "frame": { - "x": 94, - "y": 0, - "w": 95, - "h": 52 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 95, - "h": 52 - }, - "frame": { - "x": 94, - "y": 0, - "w": 95, - "h": 52 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 93, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 93, - "h": 53 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 93, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 93, - "h": 53 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 93, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 93, - "h": 53 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 93, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 93, - "h": 53 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 95, - "h": 52 - }, - "frame": { - "x": 0, - "y": 106, - "w": 95, - "h": 52 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 95, - "h": 52 - }, - "frame": { - "x": 0, - "y": 106, - "w": 95, - "h": 52 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 90, - "h": 53 - }, - "frame": { - "x": 0, - "y": 158, - "w": 90, - "h": 53 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 90, - "h": 53 - }, - "frame": { - "x": 0, - "y": 158, - "w": 90, - "h": 53 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 90, - "h": 53 - }, - "frame": { - "x": 0, - "y": 158, - "w": 90, - "h": 53 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 90, - "h": 53 - }, - "frame": { - "x": 0, - "y": 158, - "w": 90, - "h": 53 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 9, - "y": 2, - "w": 84, - "h": 57 - }, - "frame": { - "x": 0, - "y": 211, - "w": 84, - "h": 57 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 9, - "y": 2, - "w": 84, - "h": 57 - }, - "frame": { - "x": 0, - "y": 211, - "w": 84, - "h": 57 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 9, - "y": 2, - "w": 84, - "h": 57 - }, - "frame": { - "x": 0, - "y": 211, - "w": 84, - "h": 57 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 9, - "y": 2, - "w": 84, - "h": 57 - }, - "frame": { - "x": 0, - "y": 211, - "w": 84, - "h": 57 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 87, - "h": 53 - }, - "frame": { - "x": 94, - "y": 52, - "w": 87, - "h": 53 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 87, - "h": 53 - }, - "frame": { - "x": 94, - "y": 52, - "w": 87, - "h": 53 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 87, - "h": 53 - }, - "frame": { - "x": 94, - "y": 52, - "w": 87, - "h": 53 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 87, - "h": 53 - }, - "frame": { - "x": 94, - "y": 52, - "w": 87, - "h": 53 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 7, - "w": 87, - "h": 53 - }, - "frame": { - "x": 95, - "y": 105, - "w": 87, - "h": 53 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 7, - "w": 87, - "h": 53 - }, - "frame": { - "x": 95, - "y": 105, - "w": 87, - "h": 53 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 7, - "w": 87, - "h": 53 - }, - "frame": { - "x": 95, - "y": 105, - "w": 87, - "h": 53 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 7, - "w": 87, - "h": 53 - }, - "frame": { - "x": 95, - "y": 105, - "w": 87, - "h": 53 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 87, - "h": 53 - }, - "frame": { - "x": 90, - "y": 158, - "w": 87, - "h": 53 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 87, - "h": 53 - }, - "frame": { - "x": 90, - "y": 158, - "w": 87, - "h": 53 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 87, - "h": 53 - }, - "frame": { - "x": 90, - "y": 158, - "w": 87, - "h": 53 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 87, - "h": 53 - }, - "frame": { - "x": 90, - "y": 158, - "w": 87, - "h": 53 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 13, - "y": 0, - "w": 85, - "h": 55 - }, - "frame": { - "x": 84, - "y": 211, - "w": 85, - "h": 55 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 13, - "y": 0, - "w": 85, - "h": 55 - }, - "frame": { - "x": 84, - "y": 211, - "w": 85, - "h": 55 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 13, - "y": 0, - "w": 85, - "h": 55 - }, - "frame": { - "x": 84, - "y": 211, - "w": 85, - "h": 55 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 13, - "y": 0, - "w": 85, - "h": 55 - }, - "frame": { - "x": 84, - "y": 211, - "w": 85, - "h": 55 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 10, - "y": 8, - "w": 87, - "h": 52 - }, - "frame": { - "x": 181, - "y": 52, - "w": 87, - "h": 52 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 10, - "y": 8, - "w": 87, - "h": 52 - }, - "frame": { - "x": 181, - "y": 52, - "w": 87, - "h": 52 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 10, - "y": 8, - "w": 87, - "h": 52 - }, - "frame": { - "x": 181, - "y": 52, - "w": 87, - "h": 52 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 10, - "y": 8, - "w": 87, - "h": 52 - }, - "frame": { - "x": 181, - "y": 52, - "w": 87, - "h": 52 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 10, - "y": 8, - "w": 87, - "h": 52 - }, - "frame": { - "x": 181, - "y": 52, - "w": 87, - "h": 52 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 3, - "w": 84, - "h": 55 - }, - "frame": { - "x": 182, - "y": 104, - "w": 84, - "h": 55 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 3, - "w": 84, - "h": 55 - }, - "frame": { - "x": 182, - "y": 104, - "w": 84, - "h": 55 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 3, - "w": 84, - "h": 55 - }, - "frame": { - "x": 182, - "y": 104, - "w": 84, - "h": 55 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 3, - "w": 84, - "h": 55 - }, - "frame": { - "x": 182, - "y": 104, - "w": 84, - "h": 55 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 13, - "y": 4, - "w": 85, - "h": 53 - }, - "frame": { - "x": 177, - "y": 159, - "w": 85, - "h": 53 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 13, - "y": 4, - "w": 85, - "h": 53 - }, - "frame": { - "x": 177, - "y": 159, - "w": 85, - "h": 53 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 13, - "y": 4, - "w": 85, - "h": 53 - }, - "frame": { - "x": 177, - "y": 159, - "w": 85, - "h": 53 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 13, - "y": 4, - "w": 85, - "h": 53 - }, - "frame": { - "x": 177, - "y": 159, - "w": 85, - "h": 53 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 15, - "y": 3, - "w": 83, - "h": 56 - }, - "frame": { - "x": 169, - "y": 212, - "w": 83, - "h": 56 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 15, - "y": 3, - "w": 83, - "h": 56 - }, - "frame": { - "x": 169, - "y": 212, - "w": 83, - "h": 56 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 15, - "y": 3, - "w": 83, - "h": 56 - }, - "frame": { - "x": 169, - "y": 212, - "w": 83, - "h": 56 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 15, - "y": 3, - "w": 83, - "h": 56 - }, - "frame": { - "x": 169, - "y": 212, - "w": 83, - "h": 56 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:3939a94ab32127fed1d5a7151ac2eee9:d0987a8c23e60b048a74e115e6e34fc0:16072dc598107c41afadd9df4d7c27da$" - } -} diff --git a/public/images/pokemon/exp/back/902-female.png b/public/images/pokemon/exp/back/902-female.png deleted file mode 100644 index 44cb3041e86..00000000000 Binary files a/public/images/pokemon/exp/back/902-female.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/902.json b/public/images/pokemon/exp/back/902.json deleted file mode 100644 index b1b8498b3c1..00000000000 --- a/public/images/pokemon/exp/back/902.json +++ /dev/null @@ -1,1364 +0,0 @@ -{ - "textures": [ - { - "image": "902.png", - "format": "RGBA8888", - "size": { - "w": 266, - "h": 266 - }, - "scale": 1, - "frames": [ - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 95, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 95, - "h": 53 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 95, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 95, - "h": 53 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 95, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 95, - "h": 53 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 95, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 95, - "h": 53 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 95, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 95, - "h": 53 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 95, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 95, - "h": 53 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 95, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 95, - "h": 53 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 95, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 95, - "h": 53 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 95, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 95, - "h": 53 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 95, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 95, - "h": 53 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 95, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 95, - "h": 53 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 95, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 95, - "h": 53 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 95, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 95, - "h": 53 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 95, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 95, - "h": 53 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 95, - "h": 53 - }, - "frame": { - "x": 95, - "y": 0, - "w": 95, - "h": 53 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 95, - "h": 53 - }, - "frame": { - "x": 95, - "y": 0, - "w": 95, - "h": 53 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 95, - "h": 53 - }, - "frame": { - "x": 95, - "y": 0, - "w": 95, - "h": 53 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 93, - "h": 54 - }, - "frame": { - "x": 0, - "y": 106, - "w": 93, - "h": 54 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 93, - "h": 54 - }, - "frame": { - "x": 0, - "y": 106, - "w": 93, - "h": 54 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 93, - "h": 54 - }, - "frame": { - "x": 0, - "y": 106, - "w": 93, - "h": 54 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 93, - "h": 54 - }, - "frame": { - "x": 0, - "y": 106, - "w": 93, - "h": 54 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 93, - "h": 54 - }, - "frame": { - "x": 0, - "y": 106, - "w": 93, - "h": 54 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 93, - "h": 54 - }, - "frame": { - "x": 0, - "y": 106, - "w": 93, - "h": 54 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 93, - "h": 54 - }, - "frame": { - "x": 0, - "y": 106, - "w": 93, - "h": 54 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 93, - "h": 54 - }, - "frame": { - "x": 0, - "y": 106, - "w": 93, - "h": 54 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 93, - "h": 53 - }, - "frame": { - "x": 95, - "y": 53, - "w": 93, - "h": 53 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 93, - "h": 53 - }, - "frame": { - "x": 95, - "y": 53, - "w": 93, - "h": 53 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 93, - "h": 53 - }, - "frame": { - "x": 95, - "y": 53, - "w": 93, - "h": 53 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 93, - "h": 53 - }, - "frame": { - "x": 95, - "y": 53, - "w": 93, - "h": 53 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 93, - "h": 53 - }, - "frame": { - "x": 95, - "y": 53, - "w": 93, - "h": 53 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 93, - "h": 53 - }, - "frame": { - "x": 95, - "y": 53, - "w": 93, - "h": 53 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 93, - "h": 53 - }, - "frame": { - "x": 95, - "y": 53, - "w": 93, - "h": 53 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 93, - "h": 53 - }, - "frame": { - "x": 95, - "y": 53, - "w": 93, - "h": 53 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 94, - "h": 52 - }, - "frame": { - "x": 93, - "y": 106, - "w": 94, - "h": 52 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 94, - "h": 52 - }, - "frame": { - "x": 93, - "y": 106, - "w": 94, - "h": 52 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 94, - "h": 52 - }, - "frame": { - "x": 93, - "y": 106, - "w": 94, - "h": 52 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 94, - "h": 52 - }, - "frame": { - "x": 93, - "y": 106, - "w": 94, - "h": 52 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 94, - "h": 52 - }, - "frame": { - "x": 93, - "y": 106, - "w": 94, - "h": 52 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 94, - "h": 52 - }, - "frame": { - "x": 93, - "y": 106, - "w": 94, - "h": 52 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 94, - "h": 52 - }, - "frame": { - "x": 93, - "y": 106, - "w": 94, - "h": 52 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 92, - "h": 53 - }, - "frame": { - "x": 0, - "y": 160, - "w": 92, - "h": 53 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 92, - "h": 53 - }, - "frame": { - "x": 0, - "y": 160, - "w": 92, - "h": 53 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 92, - "h": 53 - }, - "frame": { - "x": 0, - "y": 160, - "w": 92, - "h": 53 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 92, - "h": 53 - }, - "frame": { - "x": 0, - "y": 160, - "w": 92, - "h": 53 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 92, - "h": 53 - }, - "frame": { - "x": 0, - "y": 160, - "w": 92, - "h": 53 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 92, - "h": 53 - }, - "frame": { - "x": 0, - "y": 160, - "w": 92, - "h": 53 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 92, - "h": 53 - }, - "frame": { - "x": 0, - "y": 160, - "w": 92, - "h": 53 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 92, - "h": 53 - }, - "frame": { - "x": 0, - "y": 160, - "w": 92, - "h": 53 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 93, - "h": 52 - }, - "frame": { - "x": 0, - "y": 213, - "w": 93, - "h": 52 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 93, - "h": 52 - }, - "frame": { - "x": 0, - "y": 213, - "w": 93, - "h": 52 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 93, - "h": 52 - }, - "frame": { - "x": 0, - "y": 213, - "w": 93, - "h": 52 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 93, - "h": 52 - }, - "frame": { - "x": 0, - "y": 213, - "w": 93, - "h": 52 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 93, - "h": 52 - }, - "frame": { - "x": 0, - "y": 213, - "w": 93, - "h": 52 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 93, - "h": 52 - }, - "frame": { - "x": 0, - "y": 213, - "w": 93, - "h": 52 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 93, - "h": 52 - }, - "frame": { - "x": 0, - "y": 213, - "w": 93, - "h": 52 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 93, - "h": 52 - }, - "frame": { - "x": 0, - "y": 213, - "w": 93, - "h": 52 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 12, - "y": 0, - "w": 87, - "h": 58 - }, - "frame": { - "x": 93, - "y": 158, - "w": 87, - "h": 58 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 12, - "y": 0, - "w": 87, - "h": 58 - }, - "frame": { - "x": 93, - "y": 158, - "w": 87, - "h": 58 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 12, - "y": 0, - "w": 87, - "h": 58 - }, - "frame": { - "x": 93, - "y": 158, - "w": 87, - "h": 58 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 12, - "y": 0, - "w": 87, - "h": 58 - }, - "frame": { - "x": 93, - "y": 158, - "w": 87, - "h": 58 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 89, - "h": 50 - }, - "frame": { - "x": 93, - "y": 216, - "w": 89, - "h": 50 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 89, - "h": 50 - }, - "frame": { - "x": 93, - "y": 216, - "w": 89, - "h": 50 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 89, - "h": 50 - }, - "frame": { - "x": 93, - "y": 216, - "w": 89, - "h": 50 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 89, - "h": 50 - }, - "frame": { - "x": 93, - "y": 216, - "w": 89, - "h": 50 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:ad774fe1463b06aea50bcdcfb8593161:00be66ffe58b669a968e6b18b9b99dac:7d196ae78ad956c5eb9131e145b5922f$" - } -} diff --git a/public/images/pokemon/exp/back/902.png b/public/images/pokemon/exp/back/902.png deleted file mode 100644 index adca91304f4..00000000000 Binary files a/public/images/pokemon/exp/back/902.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/shiny/769.json b/public/images/pokemon/exp/back/shiny/769.json deleted file mode 100644 index 62cbee813e4..00000000000 --- a/public/images/pokemon/exp/back/shiny/769.json +++ /dev/null @@ -1,1217 +0,0 @@ -{ - "textures": [ - { - "image": "769.png", - "format": "RGBA8888", - "size": { - "w": 219, - "h": 219 - }, - "scale": 1, - "frames": [ - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 57, - "h": 48 - }, - "frame": { - "x": 0, - "y": 0, - "w": 57, - "h": 48 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 57, - "h": 48 - }, - "frame": { - "x": 0, - "y": 0, - "w": 57, - "h": 48 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 57, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 57, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 57, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 57, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 57, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 57, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 57, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 57, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 57, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 57, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 57, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 57, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 57, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 57, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 57, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 57, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 57, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 57, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 57, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 57, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 113, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 113, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 113, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 113, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 113, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 48, - "w": 56, - "h": 48 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 96, - "w": 56, - "h": 48 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 96, - "w": 56, - "h": 48 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 144, - "w": 56, - "h": 48 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 25, - "w": 73, - "h": 27 - }, - "frame": { - "x": 0, - "y": 192, - "w": 73, - "h": 27 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 25, - "w": 73, - "h": 27 - }, - "frame": { - "x": 0, - "y": 192, - "w": 73, - "h": 27 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 25, - "w": 73, - "h": 27 - }, - "frame": { - "x": 0, - "y": 192, - "w": 73, - "h": 27 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 25, - "w": 73, - "h": 27 - }, - "frame": { - "x": 0, - "y": 192, - "w": 73, - "h": 27 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 25, - "w": 73, - "h": 27 - }, - "frame": { - "x": 0, - "y": 192, - "w": 73, - "h": 27 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 25, - "w": 73, - "h": 27 - }, - "frame": { - "x": 0, - "y": 192, - "w": 73, - "h": 27 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 25, - "w": 73, - "h": 27 - }, - "frame": { - "x": 0, - "y": 192, - "w": 73, - "h": 27 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 25, - "w": 73, - "h": 27 - }, - "frame": { - "x": 0, - "y": 192, - "w": 73, - "h": 27 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 56, - "y": 48, - "w": 55, - "h": 48 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 56, - "y": 48, - "w": 55, - "h": 48 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 56, - "y": 48, - "w": 55, - "h": 48 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 56, - "y": 48, - "w": 55, - "h": 48 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 56, - "y": 48, - "w": 55, - "h": 48 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 56, - "y": 96, - "w": 55, - "h": 48 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 56, - "y": 96, - "w": 55, - "h": 48 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 56, - "y": 96, - "w": 55, - "h": 48 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 56, - "y": 96, - "w": 55, - "h": 48 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 56, - "y": 96, - "w": 55, - "h": 48 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 56, - "y": 144, - "w": 55, - "h": 48 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 56, - "y": 144, - "w": 55, - "h": 48 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 111, - "y": 48, - "w": 55, - "h": 48 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 111, - "y": 96, - "w": 55, - "h": 48 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 5, - "y": 9, - "w": 64, - "h": 41 - }, - "frame": { - "x": 111, - "y": 144, - "w": 64, - "h": 41 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 5, - "y": 9, - "w": 64, - "h": 41 - }, - "frame": { - "x": 111, - "y": 144, - "w": 64, - "h": 41 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 24, - "w": 73, - "h": 28 - }, - "frame": { - "x": 111, - "y": 185, - "w": 73, - "h": 28 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 24, - "w": 73, - "h": 28 - }, - "frame": { - "x": 111, - "y": 185, - "w": 73, - "h": 28 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:922ee7114272dbc4670881968061d085:a259b23e31738d576c8d5ad691bec34b:ba2e5a01352778ce94d84746368de8fc$" - } -} diff --git a/public/images/pokemon/exp/back/shiny/769.png b/public/images/pokemon/exp/back/shiny/769.png deleted file mode 100644 index 1d557d1ce12..00000000000 Binary files a/public/images/pokemon/exp/back/shiny/769.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/shiny/770.json b/public/images/pokemon/exp/back/shiny/770.json deleted file mode 100644 index 887f1bbc383..00000000000 --- a/public/images/pokemon/exp/back/shiny/770.json +++ /dev/null @@ -1,1364 +0,0 @@ -{ - "textures": [ - { - "image": "770.png", - "format": "RGBA8888", - "size": { - "w": 380, - "h": 380 - }, - "scale": 1, - "frames": [ - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 86, - "h": 55 - }, - "frame": { - "x": 0, - "y": 0, - "w": 86, - "h": 55 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 86, - "h": 55 - }, - "frame": { - "x": 0, - "y": 0, - "w": 86, - "h": 55 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 86, - "h": 55 - }, - "frame": { - "x": 0, - "y": 0, - "w": 86, - "h": 55 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 86, - "h": 55 - }, - "frame": { - "x": 0, - "y": 0, - "w": 86, - "h": 55 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 86, - "h": 55 - }, - "frame": { - "x": 0, - "y": 0, - "w": 86, - "h": 55 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 86, - "h": 55 - }, - "frame": { - "x": 86, - "y": 0, - "w": 86, - "h": 55 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 1, - "w": 84, - "h": 56 - }, - "frame": { - "x": 172, - "y": 0, - "w": 84, - "h": 56 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 1, - "w": 84, - "h": 56 - }, - "frame": { - "x": 172, - "y": 0, - "w": 84, - "h": 56 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 1, - "w": 84, - "h": 56 - }, - "frame": { - "x": 172, - "y": 0, - "w": 84, - "h": 56 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 1, - "w": 84, - "h": 56 - }, - "frame": { - "x": 172, - "y": 0, - "w": 84, - "h": 56 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 1, - "w": 84, - "h": 56 - }, - "frame": { - "x": 172, - "y": 0, - "w": 84, - "h": 56 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 1, - "w": 84, - "h": 56 - }, - "frame": { - "x": 256, - "y": 0, - "w": 84, - "h": 56 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 82, - "h": 57 - }, - "frame": { - "x": 0, - "y": 55, - "w": 82, - "h": 57 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 82, - "h": 57 - }, - "frame": { - "x": 0, - "y": 55, - "w": 82, - "h": 57 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 82, - "h": 57 - }, - "frame": { - "x": 0, - "y": 55, - "w": 82, - "h": 57 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 82, - "h": 57 - }, - "frame": { - "x": 0, - "y": 55, - "w": 82, - "h": 57 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 82, - "h": 57 - }, - "frame": { - "x": 0, - "y": 55, - "w": 82, - "h": 57 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 82, - "h": 57 - }, - "frame": { - "x": 82, - "y": 55, - "w": 82, - "h": 57 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 84, - "h": 55 - }, - "frame": { - "x": 164, - "y": 56, - "w": 84, - "h": 55 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 84, - "h": 55 - }, - "frame": { - "x": 164, - "y": 56, - "w": 84, - "h": 55 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 84, - "h": 55 - }, - "frame": { - "x": 164, - "y": 56, - "w": 84, - "h": 55 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 84, - "h": 55 - }, - "frame": { - "x": 164, - "y": 56, - "w": 84, - "h": 55 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 84, - "h": 55 - }, - "frame": { - "x": 164, - "y": 56, - "w": 84, - "h": 55 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 84, - "h": 55 - }, - "frame": { - "x": 248, - "y": 56, - "w": 84, - "h": 55 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 82, - "h": 56 - }, - "frame": { - "x": 164, - "y": 111, - "w": 82, - "h": 56 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 82, - "h": 56 - }, - "frame": { - "x": 164, - "y": 111, - "w": 82, - "h": 56 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 82, - "h": 56 - }, - "frame": { - "x": 164, - "y": 111, - "w": 82, - "h": 56 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 82, - "h": 56 - }, - "frame": { - "x": 164, - "y": 111, - "w": 82, - "h": 56 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 82, - "h": 56 - }, - "frame": { - "x": 164, - "y": 111, - "w": 82, - "h": 56 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 82, - "h": 56 - }, - "frame": { - "x": 164, - "y": 111, - "w": 82, - "h": 56 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 82, - "h": 56 - }, - "frame": { - "x": 246, - "y": 111, - "w": 82, - "h": 56 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 82, - "h": 56 - }, - "frame": { - "x": 0, - "y": 112, - "w": 82, - "h": 56 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 82, - "y": 112, - "w": 80, - "h": 57 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 82, - "y": 112, - "w": 80, - "h": 57 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 82, - "y": 112, - "w": 80, - "h": 57 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 82, - "y": 112, - "w": 80, - "h": 57 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 82, - "y": 112, - "w": 80, - "h": 57 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 0, - "y": 168, - "w": 80, - "h": 57 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 0, - "y": 168, - "w": 80, - "h": 57 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 0, - "y": 168, - "w": 80, - "h": 57 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 0, - "y": 168, - "w": 80, - "h": 57 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 0, - "y": 168, - "w": 80, - "h": 57 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 162, - "y": 167, - "w": 80, - "h": 57 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 80, - "y": 169, - "w": 80, - "h": 57 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 0, - "y": 225, - "w": 80, - "h": 57 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 242, - "y": 167, - "w": 80, - "h": 57 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 78, - "h": 57 - }, - "frame": { - "x": 160, - "y": 224, - "w": 78, - "h": 57 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 78, - "h": 57 - }, - "frame": { - "x": 160, - "y": 224, - "w": 78, - "h": 57 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 78, - "h": 57 - }, - "frame": { - "x": 160, - "y": 224, - "w": 78, - "h": 57 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 78, - "h": 57 - }, - "frame": { - "x": 160, - "y": 224, - "w": 78, - "h": 57 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 78, - "h": 57 - }, - "frame": { - "x": 160, - "y": 224, - "w": 78, - "h": 57 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 78, - "h": 57 - }, - "frame": { - "x": 160, - "y": 224, - "w": 78, - "h": 57 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 78, - "h": 57 - }, - "frame": { - "x": 80, - "y": 226, - "w": 78, - "h": 57 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 78, - "h": 57 - }, - "frame": { - "x": 0, - "y": 282, - "w": 78, - "h": 57 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 0, - "y": 19, - "w": 96, - "h": 38 - }, - "frame": { - "x": 0, - "y": 339, - "w": 96, - "h": 38 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 85, - "h": 51 - }, - "frame": { - "x": 78, - "y": 283, - "w": 85, - "h": 51 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 2, - "y": 13, - "w": 92, - "h": 44 - }, - "frame": { - "x": 96, - "y": 334, - "w": 92, - "h": 44 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 85, - "h": 51 - }, - "frame": { - "x": 163, - "y": 281, - "w": 85, - "h": 51 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 2, - "y": 13, - "w": 92, - "h": 44 - }, - "frame": { - "x": 238, - "y": 224, - "w": 92, - "h": 44 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 0, - "y": 19, - "w": 96, - "h": 38 - }, - "frame": { - "x": 188, - "y": 332, - "w": 96, - "h": 38 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 0, - "y": 19, - "w": 96, - "h": 38 - }, - "frame": { - "x": 188, - "y": 332, - "w": 96, - "h": 38 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 0, - "y": 19, - "w": 96, - "h": 38 - }, - "frame": { - "x": 248, - "y": 268, - "w": 96, - "h": 38 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 0, - "y": 19, - "w": 96, - "h": 38 - }, - "frame": { - "x": 248, - "y": 268, - "w": 96, - "h": 38 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 0, - "y": 19, - "w": 96, - "h": 38 - }, - "frame": { - "x": 284, - "y": 306, - "w": 96, - "h": 38 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:55ae04ada6f829288ce7164dade3ea4b:cc59d4502a219eb4351f2cd3327463ac:9a5e6a86eb0697afa19bc4a32f422cc1$" - } -} diff --git a/public/images/pokemon/exp/back/shiny/770.png b/public/images/pokemon/exp/back/shiny/770.png deleted file mode 100644 index 97099a7a5e4..00000000000 Binary files a/public/images/pokemon/exp/back/shiny/770.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/shiny/843.json b/public/images/pokemon/exp/back/shiny/843.json deleted file mode 100644 index 46ae16950ad..00000000000 --- a/public/images/pokemon/exp/back/shiny/843.json +++ /dev/null @@ -1,230 +0,0 @@ -{ - "textures": [ - { - "image": "843.png", - "format": "RGBA8888", - "size": { - "w": 133, - "h": 133 - }, - "scale": 1, - "frames": [ - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 46 - }, - "frame": { - "x": 0, - "y": 0, - "w": 46, - "h": 46 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 46 - }, - "frame": { - "x": 0, - "y": 0, - "w": 46, - "h": 46 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 46 - }, - "frame": { - "x": 0, - "y": 46, - "w": 46, - "h": 46 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 46 - }, - "frame": { - "x": 0, - "y": 46, - "w": 46, - "h": 46 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 41 - }, - "frame": { - "x": 0, - "y": 92, - "w": 45, - "h": 41 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 46 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 46, - "h": 46 - }, - "frame": { - "x": 46, - "y": 0, - "w": 46, - "h": 46 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 46, - "h": 43 - }, - "frame": { - "x": 46, - "y": 46, - "w": 46, - "h": 43 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 46, - "h": 43 - }, - "frame": { - "x": 46, - "y": 46, - "w": 46, - "h": 43 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 42 - }, - "frame": { - "x": 46, - "y": 89, - "w": 45, - "h": 42 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 42 - }, - "frame": { - "x": 46, - "y": 89, - "w": 45, - "h": 42 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:821779b631adb216096c606af6af05e0:2735a7d59f569a57a22d0ed4e628a4fa:1ad579f7e215608104284deec571c282$" - } -} diff --git a/public/images/pokemon/exp/back/shiny/843.png b/public/images/pokemon/exp/back/shiny/843.png deleted file mode 100644 index ceec31910b4..00000000000 Binary files a/public/images/pokemon/exp/back/shiny/843.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/shiny/844.json b/public/images/pokemon/exp/back/shiny/844.json deleted file mode 100644 index c5d934c1e28..00000000000 --- a/public/images/pokemon/exp/back/shiny/844.json +++ /dev/null @@ -1,230 +0,0 @@ -{ - "textures": [ - { - "image": "844.png", - "format": "RGBA8888", - "size": { - "w": 158, - "h": 158 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 80, - "h": 54 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 54 - }, - "frame": { - "x": 0, - "y": 0, - "w": 80, - "h": 54 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 80, - "h": 54 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 54 - }, - "frame": { - "x": 0, - "y": 0, - "w": 80, - "h": 54 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 54 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 78, - "h": 54 - }, - "frame": { - "x": 80, - "y": 0, - "w": 78, - "h": 54 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 54 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 80, - "h": 52 - }, - "frame": { - "x": 0, - "y": 54, - "w": 80, - "h": 52 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 54 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 80, - "h": 52 - }, - "frame": { - "x": 0, - "y": 54, - "w": 80, - "h": 52 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 54 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 78, - "h": 51 - }, - "frame": { - "x": 80, - "y": 54, - "w": 78, - "h": 51 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 54 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 78, - "h": 51 - }, - "frame": { - "x": 80, - "y": 54, - "w": 78, - "h": 51 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 54 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 51 - }, - "frame": { - "x": 0, - "y": 106, - "w": 76, - "h": 51 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 54 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 51 - }, - "frame": { - "x": 0, - "y": 106, - "w": 76, - "h": 51 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 54 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 74, - "h": 51 - }, - "frame": { - "x": 76, - "y": 106, - "w": 74, - "h": 51 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:832f55237b104f730690119d0080edbd:35ebf68ce5a6c5bf4f05d30ad8381df2:791c04bd94958ea464eaa02b1a2ef466$" - } -} diff --git a/public/images/pokemon/exp/back/shiny/844.png b/public/images/pokemon/exp/back/shiny/844.png deleted file mode 100644 index 3c96cb26e7b..00000000000 Binary files a/public/images/pokemon/exp/back/shiny/844.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/shiny/902-female.json b/public/images/pokemon/exp/back/shiny/902-female.json deleted file mode 100644 index 803d60ac478..00000000000 --- a/public/images/pokemon/exp/back/shiny/902-female.json +++ /dev/null @@ -1,1133 +0,0 @@ -{ - "textures": [ - { - "image": "902-female.png", - "format": "RGBA8888", - "size": { - "w": 268, - "h": 268 - }, - "scale": 1, - "frames": [ - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 94, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 94, - "h": 53 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 94, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 94, - "h": 53 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 94, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 94, - "h": 53 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 94, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 94, - "h": 53 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 95, - "h": 52 - }, - "frame": { - "x": 94, - "y": 0, - "w": 95, - "h": 52 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 95, - "h": 52 - }, - "frame": { - "x": 94, - "y": 0, - "w": 95, - "h": 52 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 93, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 93, - "h": 53 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 93, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 93, - "h": 53 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 93, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 93, - "h": 53 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 93, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 93, - "h": 53 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 95, - "h": 52 - }, - "frame": { - "x": 0, - "y": 106, - "w": 95, - "h": 52 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 95, - "h": 52 - }, - "frame": { - "x": 0, - "y": 106, - "w": 95, - "h": 52 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 90, - "h": 53 - }, - "frame": { - "x": 0, - "y": 158, - "w": 90, - "h": 53 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 90, - "h": 53 - }, - "frame": { - "x": 0, - "y": 158, - "w": 90, - "h": 53 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 90, - "h": 53 - }, - "frame": { - "x": 0, - "y": 158, - "w": 90, - "h": 53 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 90, - "h": 53 - }, - "frame": { - "x": 0, - "y": 158, - "w": 90, - "h": 53 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 9, - "y": 2, - "w": 84, - "h": 57 - }, - "frame": { - "x": 0, - "y": 211, - "w": 84, - "h": 57 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 9, - "y": 2, - "w": 84, - "h": 57 - }, - "frame": { - "x": 0, - "y": 211, - "w": 84, - "h": 57 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 9, - "y": 2, - "w": 84, - "h": 57 - }, - "frame": { - "x": 0, - "y": 211, - "w": 84, - "h": 57 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 9, - "y": 2, - "w": 84, - "h": 57 - }, - "frame": { - "x": 0, - "y": 211, - "w": 84, - "h": 57 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 87, - "h": 53 - }, - "frame": { - "x": 94, - "y": 52, - "w": 87, - "h": 53 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 87, - "h": 53 - }, - "frame": { - "x": 94, - "y": 52, - "w": 87, - "h": 53 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 87, - "h": 53 - }, - "frame": { - "x": 94, - "y": 52, - "w": 87, - "h": 53 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 87, - "h": 53 - }, - "frame": { - "x": 94, - "y": 52, - "w": 87, - "h": 53 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 7, - "w": 87, - "h": 53 - }, - "frame": { - "x": 95, - "y": 105, - "w": 87, - "h": 53 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 7, - "w": 87, - "h": 53 - }, - "frame": { - "x": 95, - "y": 105, - "w": 87, - "h": 53 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 7, - "w": 87, - "h": 53 - }, - "frame": { - "x": 95, - "y": 105, - "w": 87, - "h": 53 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 7, - "w": 87, - "h": 53 - }, - "frame": { - "x": 95, - "y": 105, - "w": 87, - "h": 53 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 87, - "h": 53 - }, - "frame": { - "x": 90, - "y": 158, - "w": 87, - "h": 53 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 87, - "h": 53 - }, - "frame": { - "x": 90, - "y": 158, - "w": 87, - "h": 53 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 87, - "h": 53 - }, - "frame": { - "x": 90, - "y": 158, - "w": 87, - "h": 53 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 87, - "h": 53 - }, - "frame": { - "x": 90, - "y": 158, - "w": 87, - "h": 53 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 13, - "y": 0, - "w": 85, - "h": 55 - }, - "frame": { - "x": 84, - "y": 211, - "w": 85, - "h": 55 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 13, - "y": 0, - "w": 85, - "h": 55 - }, - "frame": { - "x": 84, - "y": 211, - "w": 85, - "h": 55 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 13, - "y": 0, - "w": 85, - "h": 55 - }, - "frame": { - "x": 84, - "y": 211, - "w": 85, - "h": 55 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 13, - "y": 0, - "w": 85, - "h": 55 - }, - "frame": { - "x": 84, - "y": 211, - "w": 85, - "h": 55 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 10, - "y": 8, - "w": 87, - "h": 52 - }, - "frame": { - "x": 181, - "y": 52, - "w": 87, - "h": 52 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 10, - "y": 8, - "w": 87, - "h": 52 - }, - "frame": { - "x": 181, - "y": 52, - "w": 87, - "h": 52 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 10, - "y": 8, - "w": 87, - "h": 52 - }, - "frame": { - "x": 181, - "y": 52, - "w": 87, - "h": 52 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 10, - "y": 8, - "w": 87, - "h": 52 - }, - "frame": { - "x": 181, - "y": 52, - "w": 87, - "h": 52 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 10, - "y": 8, - "w": 87, - "h": 52 - }, - "frame": { - "x": 181, - "y": 52, - "w": 87, - "h": 52 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 3, - "w": 84, - "h": 55 - }, - "frame": { - "x": 182, - "y": 104, - "w": 84, - "h": 55 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 3, - "w": 84, - "h": 55 - }, - "frame": { - "x": 182, - "y": 104, - "w": 84, - "h": 55 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 3, - "w": 84, - "h": 55 - }, - "frame": { - "x": 182, - "y": 104, - "w": 84, - "h": 55 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 3, - "w": 84, - "h": 55 - }, - "frame": { - "x": 182, - "y": 104, - "w": 84, - "h": 55 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 13, - "y": 4, - "w": 85, - "h": 53 - }, - "frame": { - "x": 177, - "y": 159, - "w": 85, - "h": 53 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 13, - "y": 4, - "w": 85, - "h": 53 - }, - "frame": { - "x": 177, - "y": 159, - "w": 85, - "h": 53 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 13, - "y": 4, - "w": 85, - "h": 53 - }, - "frame": { - "x": 177, - "y": 159, - "w": 85, - "h": 53 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 13, - "y": 4, - "w": 85, - "h": 53 - }, - "frame": { - "x": 177, - "y": 159, - "w": 85, - "h": 53 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 15, - "y": 3, - "w": 83, - "h": 56 - }, - "frame": { - "x": 169, - "y": 212, - "w": 83, - "h": 56 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 15, - "y": 3, - "w": 83, - "h": 56 - }, - "frame": { - "x": 169, - "y": 212, - "w": 83, - "h": 56 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 15, - "y": 3, - "w": 83, - "h": 56 - }, - "frame": { - "x": 169, - "y": 212, - "w": 83, - "h": 56 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 60 - }, - "spriteSourceSize": { - "x": 15, - "y": 3, - "w": 83, - "h": 56 - }, - "frame": { - "x": 169, - "y": 212, - "w": 83, - "h": 56 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:9b4b781abf75f9abb884f66e98255d50:42a087e5297a8d07c783766835cd8c53:16072dc598107c41afadd9df4d7c27da$" - } -} diff --git a/public/images/pokemon/exp/back/shiny/902-female.png b/public/images/pokemon/exp/back/shiny/902-female.png deleted file mode 100644 index 8cb6dc0f15d..00000000000 Binary files a/public/images/pokemon/exp/back/shiny/902-female.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/shiny/902.json b/public/images/pokemon/exp/back/shiny/902.json deleted file mode 100644 index 74503c628ee..00000000000 --- a/public/images/pokemon/exp/back/shiny/902.json +++ /dev/null @@ -1,1364 +0,0 @@ -{ - "textures": [ - { - "image": "902.png", - "format": "RGBA8888", - "size": { - "w": 266, - "h": 266 - }, - "scale": 1, - "frames": [ - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 95, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 95, - "h": 53 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 95, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 95, - "h": 53 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 95, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 95, - "h": 53 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 95, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 95, - "h": 53 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 95, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 95, - "h": 53 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 95, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 95, - "h": 53 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 95, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 95, - "h": 53 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 95, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 95, - "h": 53 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 95, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 95, - "h": 53 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 95, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 95, - "h": 53 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 95, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 95, - "h": 53 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 95, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 95, - "h": 53 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 95, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 95, - "h": 53 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 95, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 95, - "h": 53 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 95, - "h": 53 - }, - "frame": { - "x": 95, - "y": 0, - "w": 95, - "h": 53 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 95, - "h": 53 - }, - "frame": { - "x": 95, - "y": 0, - "w": 95, - "h": 53 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 95, - "h": 53 - }, - "frame": { - "x": 95, - "y": 0, - "w": 95, - "h": 53 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 93, - "h": 54 - }, - "frame": { - "x": 0, - "y": 106, - "w": 93, - "h": 54 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 93, - "h": 54 - }, - "frame": { - "x": 0, - "y": 106, - "w": 93, - "h": 54 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 93, - "h": 54 - }, - "frame": { - "x": 0, - "y": 106, - "w": 93, - "h": 54 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 93, - "h": 54 - }, - "frame": { - "x": 0, - "y": 106, - "w": 93, - "h": 54 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 93, - "h": 54 - }, - "frame": { - "x": 0, - "y": 106, - "w": 93, - "h": 54 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 93, - "h": 54 - }, - "frame": { - "x": 0, - "y": 106, - "w": 93, - "h": 54 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 93, - "h": 54 - }, - "frame": { - "x": 0, - "y": 106, - "w": 93, - "h": 54 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 93, - "h": 54 - }, - "frame": { - "x": 0, - "y": 106, - "w": 93, - "h": 54 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 93, - "h": 53 - }, - "frame": { - "x": 95, - "y": 53, - "w": 93, - "h": 53 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 93, - "h": 53 - }, - "frame": { - "x": 95, - "y": 53, - "w": 93, - "h": 53 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 93, - "h": 53 - }, - "frame": { - "x": 95, - "y": 53, - "w": 93, - "h": 53 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 93, - "h": 53 - }, - "frame": { - "x": 95, - "y": 53, - "w": 93, - "h": 53 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 93, - "h": 53 - }, - "frame": { - "x": 95, - "y": 53, - "w": 93, - "h": 53 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 93, - "h": 53 - }, - "frame": { - "x": 95, - "y": 53, - "w": 93, - "h": 53 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 93, - "h": 53 - }, - "frame": { - "x": 95, - "y": 53, - "w": 93, - "h": 53 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 93, - "h": 53 - }, - "frame": { - "x": 95, - "y": 53, - "w": 93, - "h": 53 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 94, - "h": 52 - }, - "frame": { - "x": 93, - "y": 106, - "w": 94, - "h": 52 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 94, - "h": 52 - }, - "frame": { - "x": 93, - "y": 106, - "w": 94, - "h": 52 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 94, - "h": 52 - }, - "frame": { - "x": 93, - "y": 106, - "w": 94, - "h": 52 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 94, - "h": 52 - }, - "frame": { - "x": 93, - "y": 106, - "w": 94, - "h": 52 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 94, - "h": 52 - }, - "frame": { - "x": 93, - "y": 106, - "w": 94, - "h": 52 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 94, - "h": 52 - }, - "frame": { - "x": 93, - "y": 106, - "w": 94, - "h": 52 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 94, - "h": 52 - }, - "frame": { - "x": 93, - "y": 106, - "w": 94, - "h": 52 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 92, - "h": 53 - }, - "frame": { - "x": 0, - "y": 160, - "w": 92, - "h": 53 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 92, - "h": 53 - }, - "frame": { - "x": 0, - "y": 160, - "w": 92, - "h": 53 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 92, - "h": 53 - }, - "frame": { - "x": 0, - "y": 160, - "w": 92, - "h": 53 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 92, - "h": 53 - }, - "frame": { - "x": 0, - "y": 160, - "w": 92, - "h": 53 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 92, - "h": 53 - }, - "frame": { - "x": 0, - "y": 160, - "w": 92, - "h": 53 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 92, - "h": 53 - }, - "frame": { - "x": 0, - "y": 160, - "w": 92, - "h": 53 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 92, - "h": 53 - }, - "frame": { - "x": 0, - "y": 160, - "w": 92, - "h": 53 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 92, - "h": 53 - }, - "frame": { - "x": 0, - "y": 160, - "w": 92, - "h": 53 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 93, - "h": 52 - }, - "frame": { - "x": 0, - "y": 213, - "w": 93, - "h": 52 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 93, - "h": 52 - }, - "frame": { - "x": 0, - "y": 213, - "w": 93, - "h": 52 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 93, - "h": 52 - }, - "frame": { - "x": 0, - "y": 213, - "w": 93, - "h": 52 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 93, - "h": 52 - }, - "frame": { - "x": 0, - "y": 213, - "w": 93, - "h": 52 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 93, - "h": 52 - }, - "frame": { - "x": 0, - "y": 213, - "w": 93, - "h": 52 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 93, - "h": 52 - }, - "frame": { - "x": 0, - "y": 213, - "w": 93, - "h": 52 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 93, - "h": 52 - }, - "frame": { - "x": 0, - "y": 213, - "w": 93, - "h": 52 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 93, - "h": 52 - }, - "frame": { - "x": 0, - "y": 213, - "w": 93, - "h": 52 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 12, - "y": 0, - "w": 87, - "h": 58 - }, - "frame": { - "x": 93, - "y": 158, - "w": 87, - "h": 58 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 12, - "y": 0, - "w": 87, - "h": 58 - }, - "frame": { - "x": 93, - "y": 158, - "w": 87, - "h": 58 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 12, - "y": 0, - "w": 87, - "h": 58 - }, - "frame": { - "x": 93, - "y": 158, - "w": 87, - "h": 58 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 12, - "y": 0, - "w": 87, - "h": 58 - }, - "frame": { - "x": 93, - "y": 158, - "w": 87, - "h": 58 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 89, - "h": 50 - }, - "frame": { - "x": 93, - "y": 216, - "w": 89, - "h": 50 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 89, - "h": 50 - }, - "frame": { - "x": 93, - "y": 216, - "w": 89, - "h": 50 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 89, - "h": 50 - }, - "frame": { - "x": 93, - "y": 216, - "w": 89, - "h": 50 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 99, - "h": 58 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 89, - "h": 50 - }, - "frame": { - "x": 93, - "y": 216, - "w": 89, - "h": 50 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:2451cf7e277062cecf292eff8b2b6f26:f341a87cf9adc9522802797cd0a2ca6a:7d196ae78ad956c5eb9131e145b5922f$" - } -} diff --git a/public/images/pokemon/exp/back/shiny/902.png b/public/images/pokemon/exp/back/shiny/902.png deleted file mode 100644 index 9b049d4a954..00000000000 Binary files a/public/images/pokemon/exp/back/shiny/902.png and /dev/null differ diff --git a/public/images/pokemon/exp/shiny/769.json b/public/images/pokemon/exp/shiny/769.json deleted file mode 100644 index 640351de7af..00000000000 --- a/public/images/pokemon/exp/shiny/769.json +++ /dev/null @@ -1,1217 +0,0 @@ -{ - "textures": [ - { - "image": "769.png", - "format": "RGBA8888", - "size": { - "w": 222, - "h": 222 - }, - "scale": 1, - "frames": [ - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 61, - "h": 46 - }, - "frame": { - "x": 0, - "y": 0, - "w": 61, - "h": 46 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 61, - "h": 46 - }, - "frame": { - "x": 0, - "y": 0, - "w": 61, - "h": 46 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 57, - "h": 48 - }, - "frame": { - "x": 61, - "y": 0, - "w": 57, - "h": 48 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 57, - "h": 48 - }, - "frame": { - "x": 61, - "y": 0, - "w": 57, - "h": 48 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 46, - "w": 56, - "h": 48 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 46, - "w": 56, - "h": 48 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 46, - "w": 56, - "h": 48 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 46, - "w": 56, - "h": 48 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 46, - "w": 56, - "h": 48 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 46, - "w": 56, - "h": 48 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 46, - "w": 56, - "h": 48 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 46, - "w": 56, - "h": 48 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 46, - "w": 56, - "h": 48 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 46, - "w": 56, - "h": 48 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 46, - "w": 56, - "h": 48 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 46, - "w": 56, - "h": 48 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 46, - "w": 56, - "h": 48 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 46, - "w": 56, - "h": 48 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 46, - "w": 56, - "h": 48 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 46, - "w": 56, - "h": 48 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 46, - "w": 56, - "h": 48 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 46, - "w": 56, - "h": 48 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 46, - "w": 56, - "h": 48 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 118, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 118, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 118, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 118, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 118, - "y": 0, - "w": 56, - "h": 48 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 94, - "w": 56, - "h": 48 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 0, - "y": 142, - "w": 56, - "h": 48 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 21, - "w": 65, - "h": 32 - }, - "frame": { - "x": 0, - "y": 190, - "w": 65, - "h": 32 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 21, - "w": 65, - "h": 32 - }, - "frame": { - "x": 0, - "y": 190, - "w": 65, - "h": 32 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 21, - "w": 65, - "h": 32 - }, - "frame": { - "x": 0, - "y": 190, - "w": 65, - "h": 32 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 21, - "w": 65, - "h": 32 - }, - "frame": { - "x": 0, - "y": 190, - "w": 65, - "h": 32 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 21, - "w": 65, - "h": 32 - }, - "frame": { - "x": 0, - "y": 190, - "w": 65, - "h": 32 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 21, - "w": 65, - "h": 32 - }, - "frame": { - "x": 0, - "y": 190, - "w": 65, - "h": 32 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 21, - "w": 65, - "h": 32 - }, - "frame": { - "x": 0, - "y": 190, - "w": 65, - "h": 32 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 21, - "w": 65, - "h": 32 - }, - "frame": { - "x": 0, - "y": 190, - "w": 65, - "h": 32 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 56, - "y": 48, - "w": 56, - "h": 48 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 56, - "y": 48, - "w": 56, - "h": 48 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 56, - "h": 48 - }, - "frame": { - "x": 56, - "y": 96, - "w": 56, - "h": 48 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 20, - "w": 65, - "h": 33 - }, - "frame": { - "x": 56, - "y": 144, - "w": 65, - "h": 33 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 20, - "w": 65, - "h": 33 - }, - "frame": { - "x": 56, - "y": 144, - "w": 65, - "h": 33 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 112, - "y": 48, - "w": 55, - "h": 48 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 112, - "y": 48, - "w": 55, - "h": 48 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 112, - "y": 48, - "w": 55, - "h": 48 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 112, - "y": 48, - "w": 55, - "h": 48 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 112, - "y": 48, - "w": 55, - "h": 48 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 112, - "y": 96, - "w": 55, - "h": 48 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 112, - "y": 96, - "w": 55, - "h": 48 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 112, - "y": 96, - "w": 55, - "h": 48 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 112, - "y": 96, - "w": 55, - "h": 48 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 112, - "y": 96, - "w": 55, - "h": 48 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 121, - "y": 144, - "w": 55, - "h": 48 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 121, - "y": 144, - "w": 55, - "h": 48 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 167, - "y": 48, - "w": 55, - "h": 48 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 53 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 55, - "h": 48 - }, - "frame": { - "x": 167, - "y": 96, - "w": 55, - "h": 48 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:66382a2034cf2f2852005e2fca1334ac:1df2264887f3adb24b5dd820c7e95284:ba2e5a01352778ce94d84746368de8fc$" - } -} diff --git a/public/images/pokemon/exp/shiny/769.png b/public/images/pokemon/exp/shiny/769.png deleted file mode 100644 index d5689d881c6..00000000000 Binary files a/public/images/pokemon/exp/shiny/769.png and /dev/null differ diff --git a/public/images/pokemon/exp/shiny/770.json b/public/images/pokemon/exp/shiny/770.json deleted file mode 100644 index 1b68b54db41..00000000000 --- a/public/images/pokemon/exp/shiny/770.json +++ /dev/null @@ -1,1364 +0,0 @@ -{ - "textures": [ - { - "image": "770.png", - "format": "RGBA8888", - "size": { - "w": 375, - "h": 375 - }, - "scale": 1, - "frames": [ - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 87, - "h": 55 - }, - "frame": { - "x": 0, - "y": 0, - "w": 87, - "h": 55 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 87, - "h": 55 - }, - "frame": { - "x": 0, - "y": 0, - "w": 87, - "h": 55 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 87, - "h": 55 - }, - "frame": { - "x": 0, - "y": 0, - "w": 87, - "h": 55 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 87, - "h": 55 - }, - "frame": { - "x": 0, - "y": 0, - "w": 87, - "h": 55 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 87, - "h": 55 - }, - "frame": { - "x": 0, - "y": 0, - "w": 87, - "h": 55 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 87, - "h": 55 - }, - "frame": { - "x": 0, - "y": 55, - "w": 87, - "h": 55 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 1, - "w": 85, - "h": 56 - }, - "frame": { - "x": 87, - "y": 0, - "w": 85, - "h": 56 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 1, - "w": 85, - "h": 56 - }, - "frame": { - "x": 87, - "y": 0, - "w": 85, - "h": 56 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 1, - "w": 85, - "h": 56 - }, - "frame": { - "x": 87, - "y": 0, - "w": 85, - "h": 56 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 1, - "w": 85, - "h": 56 - }, - "frame": { - "x": 87, - "y": 0, - "w": 85, - "h": 56 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 1, - "w": 85, - "h": 56 - }, - "frame": { - "x": 87, - "y": 0, - "w": 85, - "h": 56 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 1, - "w": 85, - "h": 56 - }, - "frame": { - "x": 0, - "y": 110, - "w": 85, - "h": 56 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 85, - "h": 55 - }, - "frame": { - "x": 172, - "y": 0, - "w": 85, - "h": 55 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 85, - "h": 55 - }, - "frame": { - "x": 172, - "y": 0, - "w": 85, - "h": 55 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 85, - "h": 55 - }, - "frame": { - "x": 172, - "y": 0, - "w": 85, - "h": 55 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 85, - "h": 55 - }, - "frame": { - "x": 172, - "y": 0, - "w": 85, - "h": 55 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 85, - "h": 55 - }, - "frame": { - "x": 172, - "y": 0, - "w": 85, - "h": 55 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 85, - "h": 55 - }, - "frame": { - "x": 0, - "y": 166, - "w": 85, - "h": 55 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 82, - "h": 57 - }, - "frame": { - "x": 0, - "y": 221, - "w": 82, - "h": 57 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 82, - "h": 57 - }, - "frame": { - "x": 0, - "y": 221, - "w": 82, - "h": 57 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 82, - "h": 57 - }, - "frame": { - "x": 0, - "y": 221, - "w": 82, - "h": 57 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 82, - "h": 57 - }, - "frame": { - "x": 0, - "y": 221, - "w": 82, - "h": 57 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 82, - "h": 57 - }, - "frame": { - "x": 0, - "y": 221, - "w": 82, - "h": 57 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 82, - "h": 57 - }, - "frame": { - "x": 0, - "y": 278, - "w": 82, - "h": 57 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 82, - "h": 56 - }, - "frame": { - "x": 257, - "y": 0, - "w": 82, - "h": 56 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 82, - "h": 56 - }, - "frame": { - "x": 257, - "y": 0, - "w": 82, - "h": 56 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 82, - "h": 56 - }, - "frame": { - "x": 257, - "y": 0, - "w": 82, - "h": 56 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 82, - "h": 56 - }, - "frame": { - "x": 257, - "y": 0, - "w": 82, - "h": 56 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 82, - "h": 56 - }, - "frame": { - "x": 257, - "y": 0, - "w": 82, - "h": 56 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 82, - "h": 56 - }, - "frame": { - "x": 257, - "y": 0, - "w": 82, - "h": 56 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 82, - "h": 54 - }, - "frame": { - "x": 87, - "y": 56, - "w": 82, - "h": 54 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 85, - "y": 110, - "w": 80, - "h": 57 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 85, - "y": 110, - "w": 80, - "h": 57 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 85, - "y": 110, - "w": 80, - "h": 57 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 85, - "y": 110, - "w": 80, - "h": 57 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 85, - "y": 110, - "w": 80, - "h": 57 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 85, - "y": 167, - "w": 80, - "h": 57 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 85, - "y": 167, - "w": 80, - "h": 57 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 85, - "y": 167, - "w": 80, - "h": 57 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 85, - "y": 167, - "w": 80, - "h": 57 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 85, - "y": 167, - "w": 80, - "h": 57 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 82, - "y": 224, - "w": 80, - "h": 57 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 82, - "y": 281, - "w": 80, - "h": 57 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 0, - "y": 20, - "w": 96, - "h": 37 - }, - "frame": { - "x": 0, - "y": 338, - "w": 96, - "h": 37 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 0, - "y": 20, - "w": 96, - "h": 37 - }, - "frame": { - "x": 96, - "y": 338, - "w": 96, - "h": 37 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 0, - "y": 20, - "w": 96, - "h": 37 - }, - "frame": { - "x": 96, - "y": 338, - "w": 96, - "h": 37 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 9, - "w": 85, - "h": 48 - }, - "frame": { - "x": 172, - "y": 55, - "w": 85, - "h": 48 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 6, - "y": 9, - "w": 85, - "h": 48 - }, - "frame": { - "x": 257, - "y": 56, - "w": 85, - "h": 48 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 82, - "h": 54 - }, - "frame": { - "x": 169, - "y": 103, - "w": 82, - "h": 54 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 165, - "y": 157, - "w": 80, - "h": 57 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 80, - "h": 57 - }, - "frame": { - "x": 251, - "y": 104, - "w": 80, - "h": 57 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 78, - "h": 57 - }, - "frame": { - "x": 245, - "y": 161, - "w": 78, - "h": 57 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 78, - "h": 57 - }, - "frame": { - "x": 245, - "y": 161, - "w": 78, - "h": 57 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 78, - "h": 57 - }, - "frame": { - "x": 245, - "y": 161, - "w": 78, - "h": 57 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 78, - "h": 57 - }, - "frame": { - "x": 245, - "y": 161, - "w": 78, - "h": 57 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 78, - "h": 57 - }, - "frame": { - "x": 245, - "y": 161, - "w": 78, - "h": 57 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 78, - "h": 57 - }, - "frame": { - "x": 245, - "y": 161, - "w": 78, - "h": 57 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 78, - "h": 57 - }, - "frame": { - "x": 165, - "y": 214, - "w": 78, - "h": 57 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 78, - "h": 57 - }, - "frame": { - "x": 162, - "y": 271, - "w": 78, - "h": 57 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 2, - "y": 18, - "w": 92, - "h": 39 - }, - "frame": { - "x": 243, - "y": 218, - "w": 92, - "h": 39 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 0, - "y": 20, - "w": 96, - "h": 37 - }, - "frame": { - "x": 243, - "y": 257, - "w": 96, - "h": 37 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 0, - "y": 20, - "w": 96, - "h": 37 - }, - "frame": { - "x": 243, - "y": 257, - "w": 96, - "h": 37 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 0, - "y": 20, - "w": 96, - "h": 37 - }, - "frame": { - "x": 240, - "y": 294, - "w": 96, - "h": 37 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 57 - }, - "spriteSourceSize": { - "x": 2, - "y": 18, - "w": 92, - "h": 39 - }, - "frame": { - "x": 192, - "y": 331, - "w": 92, - "h": 39 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:ce33d806b6d3aeb64a87ace5887286f6:bf1c87696fd9940bcd542fd3d1696df1:9a5e6a86eb0697afa19bc4a32f422cc1$" - } -} diff --git a/public/images/pokemon/exp/shiny/770.png b/public/images/pokemon/exp/shiny/770.png deleted file mode 100644 index adb3a2c6140..00000000000 Binary files a/public/images/pokemon/exp/shiny/770.png and /dev/null differ diff --git a/public/images/pokemon/exp/shiny/843.json b/public/images/pokemon/exp/shiny/843.json deleted file mode 100644 index 606b651e157..00000000000 --- a/public/images/pokemon/exp/shiny/843.json +++ /dev/null @@ -1,272 +0,0 @@ -{ - "textures": [ - { - "image": "843.png", - "format": "RGBA8888", - "size": { - "w": 159, - "h": 159 - }, - "scale": 1, - "frames": [ - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 47, - "h": 41 - }, - "frame": { - "x": 0, - "y": 0, - "w": 47, - "h": 41 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 40 - }, - "frame": { - "x": 47, - "y": 0, - "w": 48, - "h": 40 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 40 - }, - "frame": { - "x": 95, - "y": 0, - "w": 48, - "h": 40 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 47, - "h": 41 - }, - "frame": { - "x": 0, - "y": 41, - "w": 47, - "h": 41 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 46, - "h": 41 - }, - "frame": { - "x": 47, - "y": 40, - "w": 46, - "h": 41 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 48, - "h": 39 - }, - "frame": { - "x": 93, - "y": 40, - "w": 48, - "h": 39 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 48, - "h": 39 - }, - "frame": { - "x": 93, - "y": 40, - "w": 48, - "h": 39 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 46, - "h": 41 - }, - "frame": { - "x": 0, - "y": 82, - "w": 46, - "h": 41 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 48, - "h": 39 - }, - "frame": { - "x": 93, - "y": 79, - "w": 48, - "h": 39 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 45, - "h": 41 - }, - "frame": { - "x": 46, - "y": 118, - "w": 45, - "h": 41 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 45, - "h": 41 - }, - "frame": { - "x": 46, - "y": 118, - "w": 45, - "h": 41 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 43, - "h": 41 - }, - "frame": { - "x": 91, - "y": 118, - "w": 43, - "h": 41 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:5f15acfc11dc50d31d21daaca503d589:30076d23ed7b4da19020c913806f4c2d:1ad579f7e215608104284deec571c282$" - } -} diff --git a/public/images/pokemon/exp/shiny/843.png b/public/images/pokemon/exp/shiny/843.png deleted file mode 100644 index 9833474eddf..00000000000 Binary files a/public/images/pokemon/exp/shiny/843.png and /dev/null differ diff --git a/public/images/pokemon/exp/shiny/844.json b/public/images/pokemon/exp/shiny/844.json deleted file mode 100644 index 09aa143cb67..00000000000 --- a/public/images/pokemon/exp/shiny/844.json +++ /dev/null @@ -1,314 +0,0 @@ -{ - "textures": [ - { - "image": "844.png", - "format": "RGBA8888", - "size": { - "w": 216, - "h": 216 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 54 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 86, - "h": 54 - }, - "frame": { - "x": 0, - "y": 0, - "w": 86, - "h": 54 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 54 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 86, - "h": 54 - }, - "frame": { - "x": 86, - "y": 0, - "w": 86, - "h": 54 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 54 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 86, - "h": 54 - }, - "frame": { - "x": 86, - "y": 0, - "w": 86, - "h": 54 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 54 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 86, - "h": 54 - }, - "frame": { - "x": 0, - "y": 54, - "w": 86, - "h": 54 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 54 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 86, - "h": 54 - }, - "frame": { - "x": 0, - "y": 54, - "w": 86, - "h": 54 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 54 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 85, - "h": 54 - }, - "frame": { - "x": 86, - "y": 54, - "w": 85, - "h": 54 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 54 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 85, - "h": 54 - }, - "frame": { - "x": 86, - "y": 54, - "w": 85, - "h": 54 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 54 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 84, - "h": 54 - }, - "frame": { - "x": 0, - "y": 108, - "w": 84, - "h": 54 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 54 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 84, - "h": 54 - }, - "frame": { - "x": 0, - "y": 108, - "w": 84, - "h": 54 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 54 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 84, - "h": 54 - }, - "frame": { - "x": 0, - "y": 162, - "w": 84, - "h": 54 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 54 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 84, - "h": 54 - }, - "frame": { - "x": 0, - "y": 162, - "w": 84, - "h": 54 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 54 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 82, - "h": 54 - }, - "frame": { - "x": 84, - "y": 108, - "w": 82, - "h": 54 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 54 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 82, - "h": 54 - }, - "frame": { - "x": 84, - "y": 108, - "w": 82, - "h": 54 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 54 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 81, - "h": 54 - }, - "frame": { - "x": 84, - "y": 162, - "w": 81, - "h": 54 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:05e465c32fe20d63f626950aec04b8b3:439b1bdbab19f47195d6524787ecf409:791c04bd94958ea464eaa02b1a2ef466$" - } -} diff --git a/public/images/pokemon/exp/shiny/844.png b/public/images/pokemon/exp/shiny/844.png deleted file mode 100644 index 252aa8b8df9..00000000000 Binary files a/public/images/pokemon/exp/shiny/844.png and /dev/null differ diff --git a/public/images/pokemon/exp/shiny/902-female.json b/public/images/pokemon/exp/shiny/902-female.json deleted file mode 100644 index b2acc243003..00000000000 --- a/public/images/pokemon/exp/shiny/902-female.json +++ /dev/null @@ -1,1343 +0,0 @@ -{ - "textures": [ - { - "image": "902-female.png", - "format": "RGBA8888", - "size": { - "w": 256, - "h": 256 - }, - "scale": 1, - "frames": [ - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 87, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 87, - "h": 53 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 87, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 87, - "h": 53 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 87, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 87, - "h": 53 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 87, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 87, - "h": 53 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 87, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 87, - "h": 53 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 87, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 87, - "h": 53 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 89, - "h": 53 - }, - "frame": { - "x": 87, - "y": 0, - "w": 89, - "h": 53 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 89, - "h": 53 - }, - "frame": { - "x": 87, - "y": 0, - "w": 89, - "h": 53 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 89, - "h": 53 - }, - "frame": { - "x": 87, - "y": 0, - "w": 89, - "h": 53 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 89, - "h": 53 - }, - "frame": { - "x": 87, - "y": 0, - "w": 89, - "h": 53 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 89, - "h": 53 - }, - "frame": { - "x": 87, - "y": 0, - "w": 89, - "h": 53 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 89, - "h": 53 - }, - "frame": { - "x": 87, - "y": 0, - "w": 89, - "h": 53 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 89, - "h": 53 - }, - "frame": { - "x": 87, - "y": 0, - "w": 89, - "h": 53 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 89, - "h": 53 - }, - "frame": { - "x": 87, - "y": 0, - "w": 89, - "h": 53 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 78, - "h": 65 - }, - "frame": { - "x": 176, - "y": 0, - "w": 78, - "h": 65 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 78, - "h": 65 - }, - "frame": { - "x": 176, - "y": 0, - "w": 78, - "h": 65 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 78, - "h": 65 - }, - "frame": { - "x": 176, - "y": 0, - "w": 78, - "h": 65 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 78, - "h": 65 - }, - "frame": { - "x": 176, - "y": 0, - "w": 78, - "h": 65 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 78, - "h": 65 - }, - "frame": { - "x": 176, - "y": 0, - "w": 78, - "h": 65 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 78, - "h": 65 - }, - "frame": { - "x": 176, - "y": 0, - "w": 78, - "h": 65 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 78, - "h": 65 - }, - "frame": { - "x": 176, - "y": 0, - "w": 78, - "h": 65 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 91, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 91, - "h": 53 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 91, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 91, - "h": 53 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 91, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 91, - "h": 53 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 91, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 91, - "h": 53 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 91, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 91, - "h": 53 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 91, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 91, - "h": 53 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 91, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 91, - "h": 53 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 91, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 91, - "h": 53 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 84, - "h": 54 - }, - "frame": { - "x": 91, - "y": 53, - "w": 84, - "h": 54 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 84, - "h": 54 - }, - "frame": { - "x": 91, - "y": 53, - "w": 84, - "h": 54 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 84, - "h": 54 - }, - "frame": { - "x": 91, - "y": 53, - "w": 84, - "h": 54 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 84, - "h": 54 - }, - "frame": { - "x": 91, - "y": 53, - "w": 84, - "h": 54 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 84, - "h": 54 - }, - "frame": { - "x": 91, - "y": 53, - "w": 84, - "h": 54 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 84, - "h": 54 - }, - "frame": { - "x": 91, - "y": 53, - "w": 84, - "h": 54 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 84, - "h": 54 - }, - "frame": { - "x": 91, - "y": 53, - "w": 84, - "h": 54 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 84, - "h": 54 - }, - "frame": { - "x": 91, - "y": 53, - "w": 84, - "h": 54 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 81, - "h": 64 - }, - "frame": { - "x": 175, - "y": 65, - "w": 81, - "h": 64 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 81, - "h": 64 - }, - "frame": { - "x": 175, - "y": 65, - "w": 81, - "h": 64 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 87, - "h": 53 - }, - "frame": { - "x": 0, - "y": 106, - "w": 87, - "h": 53 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 87, - "h": 53 - }, - "frame": { - "x": 0, - "y": 106, - "w": 87, - "h": 53 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 83, - "h": 58 - }, - "frame": { - "x": 87, - "y": 107, - "w": 83, - "h": 58 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 83, - "h": 58 - }, - "frame": { - "x": 87, - "y": 107, - "w": 83, - "h": 58 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 83, - "h": 58 - }, - "frame": { - "x": 87, - "y": 107, - "w": 83, - "h": 58 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 83, - "h": 58 - }, - "frame": { - "x": 87, - "y": 107, - "w": 83, - "h": 58 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 83, - "h": 58 - }, - "frame": { - "x": 87, - "y": 107, - "w": 83, - "h": 58 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 83, - "h": 58 - }, - "frame": { - "x": 87, - "y": 107, - "w": 83, - "h": 58 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 83, - "h": 58 - }, - "frame": { - "x": 87, - "y": 107, - "w": 83, - "h": 58 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 83, - "h": 58 - }, - "frame": { - "x": 87, - "y": 107, - "w": 83, - "h": 58 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 81, - "h": 64 - }, - "frame": { - "x": 170, - "y": 129, - "w": 81, - "h": 64 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 81, - "h": 64 - }, - "frame": { - "x": 170, - "y": 129, - "w": 81, - "h": 64 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 92, - "h": 54 - }, - "frame": { - "x": 0, - "y": 165, - "w": 92, - "h": 54 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 92, - "h": 54 - }, - "frame": { - "x": 0, - "y": 165, - "w": 92, - "h": 54 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 92, - "h": 54 - }, - "frame": { - "x": 0, - "y": 165, - "w": 92, - "h": 54 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 92, - "h": 54 - }, - "frame": { - "x": 0, - "y": 165, - "w": 92, - "h": 54 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 92, - "h": 54 - }, - "frame": { - "x": 0, - "y": 165, - "w": 92, - "h": 54 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 92, - "h": 54 - }, - "frame": { - "x": 0, - "y": 165, - "w": 92, - "h": 54 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 92, - "h": 54 - }, - "frame": { - "x": 0, - "y": 165, - "w": 92, - "h": 54 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 92, - "h": 54 - }, - "frame": { - "x": 0, - "y": 165, - "w": 92, - "h": 54 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 94, - "h": 55 - }, - "frame": { - "x": 92, - "y": 193, - "w": 94, - "h": 55 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 94, - "h": 55 - }, - "frame": { - "x": 92, - "y": 193, - "w": 94, - "h": 55 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 94, - "h": 55 - }, - "frame": { - "x": 92, - "y": 193, - "w": 94, - "h": 55 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 100, - "h": 68 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 94, - "h": 55 - }, - "frame": { - "x": 92, - "y": 193, - "w": 94, - "h": 55 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:ab9ce73c2d4f4722486455dc17452993:ab5c13c3b6e8c1e1332cefd93d4723ce:16072dc598107c41afadd9df4d7c27da$" - } -} diff --git a/public/images/pokemon/exp/shiny/902-female.png b/public/images/pokemon/exp/shiny/902-female.png deleted file mode 100644 index c51e2ca5481..00000000000 Binary files a/public/images/pokemon/exp/shiny/902-female.png and /dev/null differ diff --git a/public/images/pokemon/exp/shiny/902.json b/public/images/pokemon/exp/shiny/902.json deleted file mode 100644 index 13b0678dbe7..00000000000 --- a/public/images/pokemon/exp/shiny/902.json +++ /dev/null @@ -1,1364 +0,0 @@ -{ - "textures": [ - { - "image": "902.png", - "format": "RGBA8888", - "size": { - "w": 256, - "h": 256 - }, - "scale": 1, - "frames": [ - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 88, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 88, - "h": 53 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 88, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 88, - "h": 53 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 88, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 88, - "h": 53 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 88, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 88, - "h": 53 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 88, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 88, - "h": 53 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 88, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 88, - "h": 53 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 88, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 88, - "h": 53 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 88, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 88, - "h": 53 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 91, - "h": 53 - }, - "frame": { - "x": 88, - "y": 0, - "w": 91, - "h": 53 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 91, - "h": 53 - }, - "frame": { - "x": 88, - "y": 0, - "w": 91, - "h": 53 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 91, - "h": 53 - }, - "frame": { - "x": 88, - "y": 0, - "w": 91, - "h": 53 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 91, - "h": 53 - }, - "frame": { - "x": 88, - "y": 0, - "w": 91, - "h": 53 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 77, - "h": 71 - }, - "frame": { - "x": 179, - "y": 0, - "w": 77, - "h": 71 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 77, - "h": 71 - }, - "frame": { - "x": 179, - "y": 0, - "w": 77, - "h": 71 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 77, - "h": 71 - }, - "frame": { - "x": 179, - "y": 0, - "w": 77, - "h": 71 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 77, - "h": 71 - }, - "frame": { - "x": 179, - "y": 0, - "w": 77, - "h": 71 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 88, - "h": 54 - }, - "frame": { - "x": 0, - "y": 53, - "w": 88, - "h": 54 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 88, - "h": 54 - }, - "frame": { - "x": 0, - "y": 53, - "w": 88, - "h": 54 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 88, - "h": 54 - }, - "frame": { - "x": 0, - "y": 53, - "w": 88, - "h": 54 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 88, - "h": 54 - }, - "frame": { - "x": 0, - "y": 53, - "w": 88, - "h": 54 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 88, - "h": 54 - }, - "frame": { - "x": 0, - "y": 53, - "w": 88, - "h": 54 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 88, - "h": 54 - }, - "frame": { - "x": 0, - "y": 53, - "w": 88, - "h": 54 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 88, - "h": 54 - }, - "frame": { - "x": 0, - "y": 53, - "w": 88, - "h": 54 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 88, - "h": 54 - }, - "frame": { - "x": 0, - "y": 53, - "w": 88, - "h": 54 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 88, - "h": 56 - }, - "frame": { - "x": 88, - "y": 53, - "w": 88, - "h": 56 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 88, - "h": 56 - }, - "frame": { - "x": 88, - "y": 53, - "w": 88, - "h": 56 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 88, - "h": 56 - }, - "frame": { - "x": 88, - "y": 53, - "w": 88, - "h": 56 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 88, - "h": 56 - }, - "frame": { - "x": 88, - "y": 53, - "w": 88, - "h": 56 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 88, - "h": 56 - }, - "frame": { - "x": 88, - "y": 53, - "w": 88, - "h": 56 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 88, - "h": 56 - }, - "frame": { - "x": 88, - "y": 53, - "w": 88, - "h": 56 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 88, - "h": 56 - }, - "frame": { - "x": 88, - "y": 53, - "w": 88, - "h": 56 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 88, - "h": 56 - }, - "frame": { - "x": 88, - "y": 53, - "w": 88, - "h": 56 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 92, - "h": 54 - }, - "frame": { - "x": 0, - "y": 109, - "w": 92, - "h": 54 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 92, - "h": 54 - }, - "frame": { - "x": 0, - "y": 109, - "w": 92, - "h": 54 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 92, - "h": 54 - }, - "frame": { - "x": 0, - "y": 109, - "w": 92, - "h": 54 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 92, - "h": 54 - }, - "frame": { - "x": 0, - "y": 109, - "w": 92, - "h": 54 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 92, - "h": 54 - }, - "frame": { - "x": 0, - "y": 109, - "w": 92, - "h": 54 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 92, - "h": 54 - }, - "frame": { - "x": 0, - "y": 109, - "w": 92, - "h": 54 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 92, - "h": 54 - }, - "frame": { - "x": 92, - "y": 109, - "w": 92, - "h": 54 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 92, - "h": 54 - }, - "frame": { - "x": 92, - "y": 109, - "w": 92, - "h": 54 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 86, - "h": 59 - }, - "frame": { - "x": 0, - "y": 163, - "w": 86, - "h": 59 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 86, - "h": 59 - }, - "frame": { - "x": 0, - "y": 163, - "w": 86, - "h": 59 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 86, - "h": 59 - }, - "frame": { - "x": 0, - "y": 163, - "w": 86, - "h": 59 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 86, - "h": 59 - }, - "frame": { - "x": 0, - "y": 163, - "w": 86, - "h": 59 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 86, - "h": 59 - }, - "frame": { - "x": 0, - "y": 163, - "w": 86, - "h": 59 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 86, - "h": 59 - }, - "frame": { - "x": 0, - "y": 163, - "w": 86, - "h": 59 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 86, - "h": 59 - }, - "frame": { - "x": 0, - "y": 163, - "w": 86, - "h": 59 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 86, - "h": 59 - }, - "frame": { - "x": 0, - "y": 163, - "w": 86, - "h": 59 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 86, - "h": 59 - }, - "frame": { - "x": 0, - "y": 163, - "w": 86, - "h": 59 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 83, - "h": 61 - }, - "frame": { - "x": 86, - "y": 163, - "w": 83, - "h": 61 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 83, - "h": 61 - }, - "frame": { - "x": 86, - "y": 163, - "w": 83, - "h": 61 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 83, - "h": 61 - }, - "frame": { - "x": 86, - "y": 163, - "w": 83, - "h": 61 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 83, - "h": 61 - }, - "frame": { - "x": 86, - "y": 163, - "w": 83, - "h": 61 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 83, - "h": 61 - }, - "frame": { - "x": 86, - "y": 163, - "w": 83, - "h": 61 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 83, - "h": 61 - }, - "frame": { - "x": 86, - "y": 163, - "w": 83, - "h": 61 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 83, - "h": 61 - }, - "frame": { - "x": 86, - "y": 163, - "w": 83, - "h": 61 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 81, - "h": 67 - }, - "frame": { - "x": 169, - "y": 163, - "w": 81, - "h": 67 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 81, - "h": 67 - }, - "frame": { - "x": 169, - "y": 163, - "w": 81, - "h": 67 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 81, - "h": 67 - }, - "frame": { - "x": 169, - "y": 163, - "w": 81, - "h": 67 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 81, - "h": 67 - }, - "frame": { - "x": 169, - "y": 163, - "w": 81, - "h": 67 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 81, - "h": 67 - }, - "frame": { - "x": 169, - "y": 163, - "w": 81, - "h": 67 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 81, - "h": 67 - }, - "frame": { - "x": 169, - "y": 163, - "w": 81, - "h": 67 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 81, - "h": 67 - }, - "frame": { - "x": 169, - "y": 163, - "w": 81, - "h": 67 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 81, - "h": 67 - }, - "frame": { - "x": 169, - "y": 163, - "w": 81, - "h": 67 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:dd520ee67a5337a030aa8818dad70dc7:1454ab42db203380c904afffd4339145:7d196ae78ad956c5eb9131e145b5922f$" - } -} diff --git a/public/images/pokemon/exp/shiny/902.png b/public/images/pokemon/exp/shiny/902.png deleted file mode 100644 index 495de913823..00000000000 Binary files a/public/images/pokemon/exp/shiny/902.png and /dev/null differ diff --git a/public/images/pokemon/shiny/550-white-striped.json b/public/images/pokemon/shiny/550-white-striped.json index 83d6d8ff942..f667f112133 100644 --- a/public/images/pokemon/shiny/550-white-striped.json +++ b/public/images/pokemon/shiny/550-white-striped.json @@ -1,41 +1,810 @@ -{ - "textures": [ - { - "image": "550-white-striped.png", - "format": "RGBA8888", - "size": { - "w": 38, - "h": 38 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 38, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 35 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:592de4969ade5134b1be515df3b8d4a7:457dbd40f7a620a5fcd261957e7fda29:f97864a794849ea9866466461e0e9a7f$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 37, "y": 102, "w": 37, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 37, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 111, "y": 102, "w": 36, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 36, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 219, "y": 102, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 3, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 199, "y": 170, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 166, "y": 170, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 133, "y": 170, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 100, "y": 170, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 67, "y": 170, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 34, "y": 170, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 3, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 0, "y": 170, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 34, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 36, "y": 136, "w": 35, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 35, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 0, "y": 136, "w": 36, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 36, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 183, "y": 102, "w": 36, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 36, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 147, "y": 102, "w": 36, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 36, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 153, "y": 68, "w": 38, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 38, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 68, "w": 39, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 3, "w": 39, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 123, "y": 0, "w": 40, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 40, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 42, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 42, "y": 0, "w": 41, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 41, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 83, "y": 0, "w": 40, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 40, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 195, "y": 34, "w": 39, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 3, "w": 39, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 156, "y": 34, "w": 39, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 39, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 117, "y": 34, "w": 39, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 39, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 115, "y": 68, "w": 38, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 38, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 37, "y": 102, "w": 37, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 37, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 111, "y": 102, "w": 36, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 36, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 219, "y": 102, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 3, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 199, "y": 170, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 166, "y": 170, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 133, "y": 170, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 100, "y": 170, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 67, "y": 170, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 34, "y": 170, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 3, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 0, "y": 170, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 34, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 36, "y": 136, "w": 35, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 35, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 0, "y": 136, "w": 36, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 36, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 183, "y": 102, "w": 36, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 36, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 147, "y": 102, "w": 36, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 36, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 153, "y": 68, "w": 38, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 38, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 0, "y": 68, "w": 39, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 3, "w": 39, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 123, "y": 0, "w": 40, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 40, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 42, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 42, "y": 0, "w": 41, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 41, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 83, "y": 0, "w": 40, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 40, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 195, "y": 34, "w": 39, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 3, "w": 39, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 156, "y": 34, "w": 39, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 39, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 117, "y": 34, "w": 39, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 39, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 115, "y": 68, "w": 38, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 38, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 37, "y": 102, "w": 37, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 37, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 111, "y": 102, "w": 36, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 36, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 219, "y": 102, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 3, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 199, "y": 170, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 166, "y": 170, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 133, "y": 170, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 100, "y": 170, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 67, "y": 170, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 34, "y": 170, "w": 33, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 3, "w": 33, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 0, "y": 170, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 34, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 36, "y": 136, "w": 35, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 35, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 0, "y": 136, "w": 36, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 36, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 183, "y": 102, "w": 36, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 36, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 147, "y": 102, "w": 36, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 36, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 153, "y": 68, "w": 38, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 38, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 0, "y": 68, "w": 39, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 3, "w": 39, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 123, "y": 0, "w": 40, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 40, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 42, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 42, "y": 0, "w": 41, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 41, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 83, "y": 0, "w": 40, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 40, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 195, "y": 34, "w": 39, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 3, "w": 39, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 156, "y": 34, "w": 39, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 39, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 117, "y": 34, "w": 39, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 39, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 115, "y": 68, "w": 38, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 38, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 37, "y": 102, "w": 37, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 37, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 71, "y": 136, "w": 35, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 35, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 78, "y": 34, "w": 39, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 39, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 106, "y": 136, "w": 35, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 2, "w": 35, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 39, "y": 34, "w": 39, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 2, "w": 39, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 141, "y": 136, "w": 35, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 35, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 0, "y": 34, "w": 39, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 39, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 176, "y": 136, "w": 35, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 35, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 202, "y": 0, "w": 39, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 39, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 74, "y": 102, "w": 37, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 37, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 211, "y": 136, "w": 35, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 35, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 191, "y": 68, "w": 37, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 37, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 163, "y": 0, "w": 39, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 39, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 77, "y": 68, "w": 38, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 38, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 39, "y": 68, "w": 38, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 38, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 0, "y": 102, "w": 37, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 1, "w": 37, "h": 34 }, + "sourceSize": { "w": 52, "h": 39 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "550-white-striped.png", + "format": "I8", + "size": { "w": 252, "h": 204 }, + "scale": "1", + "frameTags": [ + ], + "layers": [ + { "name": "Layer", "opacity": 255, "blendMode": "normal" } + ], + "slices": [ + ] + } } diff --git a/public/images/pokemon/shiny/550-white-striped.png b/public/images/pokemon/shiny/550-white-striped.png index 183fd1823d5..2e9d628e436 100644 Binary files a/public/images/pokemon/shiny/550-white-striped.png and b/public/images/pokemon/shiny/550-white-striped.png differ diff --git a/public/images/pokemon/shiny/769.json b/public/images/pokemon/shiny/769.json index acbeec302e1..36284af1640 100644 --- a/public/images/pokemon/shiny/769.json +++ b/public/images/pokemon/shiny/769.json @@ -1,41 +1,423 @@ -{ - "textures": [ - { - "image": "769.png", - "format": "RGBA8888", - "size": { - "w": 54, - "h": 54 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 54, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 54, - "h": 46 - }, - "frame": { - "x": 0, - "y": 0, - "w": 54, - "h": 46 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:8512fb94a4c360440d75d608cf6e0dbb:fa14bf3860ae175e13f575b34f9c4eeb:ba2e5a01352778ce94d84746368de8fc$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 106, "y": 94, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 106, "y": 94, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 59, "y": 0, "w": 54, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 54, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 55, "y": 47, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 108, "y": 47, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 106, "y": 94, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 106, "y": 94, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 59, "y": 0, "w": 54, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 54, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 55, "y": 47, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 108, "y": 47, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 106, "y": 94, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 330 + }, + { + "filename": "0012.png", + "frame": { "x": 106, "y": 94, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0013.png", + "frame": { "x": 59, "y": 0, "w": 54, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 54, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0014.png", + "frame": { "x": 55, "y": 47, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0015.png", + "frame": { "x": 108, "y": 47, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0016.png", + "frame": { "x": 160, "y": 94, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0017.png", + "frame": { "x": 106, "y": 94, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0018.png", + "frame": { "x": 59, "y": 0, "w": 54, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 54, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0019.png", + "frame": { "x": 55, "y": 47, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0020.png", + "frame": { "x": 108, "y": 47, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0021.png", + "frame": { "x": 106, "y": 94, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 330 + }, + { + "filename": "0022.png", + "frame": { "x": 106, "y": 94, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0023.png", + "frame": { "x": 0, "y": 44, "w": 55, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 55, "h": 46 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0024.png", + "frame": { "x": 0, "y": 0, "w": 59, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 59, "h": 44 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0025.png", + "frame": { "x": 0, "y": 141, "w": 63, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 63, "h": 31 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0026.png", + "frame": { "x": 160, "y": 140, "w": 65, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 22, "w": 65, "h": 31 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 770 + }, + { + "filename": "0027.png", + "frame": { "x": 160, "y": 140, "w": 65, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 22, "w": 65, "h": 31 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0028.png", + "frame": { "x": 0, "y": 141, "w": 63, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 63, "h": 31 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0029.png", + "frame": { "x": 0, "y": 0, "w": 59, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 59, "h": 44 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0030.png", + "frame": { "x": 0, "y": 44, "w": 55, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 55, "h": 46 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0031.png", + "frame": { "x": 106, "y": 94, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0032.png", + "frame": { "x": 106, "y": 94, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0033.png", + "frame": { "x": 59, "y": 0, "w": 54, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 54, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0034.png", + "frame": { "x": 55, "y": 47, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0035.png", + "frame": { "x": 108, "y": 47, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0036.png", + "frame": { "x": 106, "y": 94, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 330 + }, + { + "filename": "0037.png", + "frame": { "x": 106, "y": 94, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0038.png", + "frame": { "x": 113, "y": 0, "w": 54, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 54, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0039.png", + "frame": { "x": 161, "y": 47, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0040.png", + "frame": { "x": 0, "y": 90, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0041.png", + "frame": { "x": 106, "y": 140, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0042.png", + "frame": { "x": 106, "y": 140, "w": 54, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 54, "h": 46 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0043.png", + "frame": { "x": 167, "y": 0, "w": 54, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 54, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0044.png", + "frame": { "x": 161, "y": 47, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + }, + { + "filename": "0045.png", + "frame": { "x": 53, "y": 94, "w": 53, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 53, "h": 47 }, + "sourceSize": { "w": 65, "h": 53 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "769.png", + "format": "I8", + "size": { "w": 225, "h": 186 }, + "scale": "1", + "frameTags": [ + ], + "layers": [ + { "name": "Layer", "opacity": 255, "blendMode": "normal" } + ], + "slices": [ + ] + } } diff --git a/public/images/pokemon/shiny/769.png b/public/images/pokemon/shiny/769.png index baa97be0df5..048ced8b759 100644 Binary files a/public/images/pokemon/shiny/769.png and b/public/images/pokemon/shiny/769.png differ diff --git a/public/images/pokemon/shiny/770.json b/public/images/pokemon/shiny/770.json index 36d47eca80b..2170fc02cbc 100644 --- a/public/images/pokemon/shiny/770.json +++ b/public/images/pokemon/shiny/770.json @@ -1,41 +1,594 @@ -{ - "textures": [ - { - "image": "770.png", - "format": "RGBA8888", - "size": { - "w": 76, - "h": 76 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 76, - "h": 57 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 57 - }, - "frame": { - "x": 0, - "y": 0, - "w": 76, - "h": 57 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:e1343105f8aae6ed43401fdba2ce5ba4:cc12a6c56da88f7b185b8fb2fc3409fa:9a5e6a86eb0697afa19bc4a32f422cc1$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 78, "y": 110, "w": 76, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 76, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 160, "y": 55, "w": 78, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 78, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 492, "y": 54, "w": 80, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 80, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 336, "y": 0, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 83, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 0, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 85, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 170, "y": 0, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 83, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 0, "y": 54, "w": 80, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 80, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 336, "y": 54, "w": 78, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 78, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 78, "y": 110, "w": 76, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 76, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 160, "y": 55, "w": 78, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 78, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 492, "y": 54, "w": 80, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 80, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 336, "y": 0, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 83, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0013.png", + "frame": { "x": 0, "y": 0, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 85, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0014.png", + "frame": { "x": 170, "y": 0, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 83, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0015.png", + "frame": { "x": 0, "y": 54, "w": 80, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 80, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0016.png", + "frame": { "x": 336, "y": 54, "w": 78, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 78, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0017.png", + "frame": { "x": 78, "y": 110, "w": 76, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 76, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0018.png", + "frame": { "x": 160, "y": 55, "w": 78, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 78, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0019.png", + "frame": { "x": 492, "y": 54, "w": 80, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 80, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0020.png", + "frame": { "x": 419, "y": 0, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 83, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0021.png", + "frame": { "x": 85, "y": 0, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 85, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0022.png", + "frame": { "x": 253, "y": 0, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 83, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0023.png", + "frame": { "x": 80, "y": 54, "w": 80, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 80, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0024.png", + "frame": { "x": 414, "y": 54, "w": 78, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 78, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0025.png", + "frame": { "x": 154, "y": 111, "w": 76, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 76, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0026.png", + "frame": { "x": 238, "y": 55, "w": 78, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 78, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0027.png", + "frame": { "x": 492, "y": 54, "w": 80, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 80, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0028.png", + "frame": { "x": 336, "y": 0, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 83, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0029.png", + "frame": { "x": 0, "y": 0, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 85, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0030.png", + "frame": { "x": 170, "y": 0, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 83, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0031.png", + "frame": { "x": 0, "y": 54, "w": 80, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 80, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0032.png", + "frame": { "x": 336, "y": 54, "w": 78, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 78, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0033.png", + "frame": { "x": 78, "y": 110, "w": 76, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 76, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0034.png", + "frame": { "x": 160, "y": 55, "w": 78, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 78, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0035.png", + "frame": { "x": 492, "y": 54, "w": 80, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 80, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0036.png", + "frame": { "x": 336, "y": 0, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 83, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0037.png", + "frame": { "x": 0, "y": 0, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 85, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0038.png", + "frame": { "x": 170, "y": 0, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 83, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0039.png", + "frame": { "x": 0, "y": 54, "w": 80, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 80, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0040.png", + "frame": { "x": 336, "y": 54, "w": 78, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 78, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0041.png", + "frame": { "x": 78, "y": 110, "w": 76, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 76, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0042.png", + "frame": { "x": 160, "y": 55, "w": 78, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 78, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0043.png", + "frame": { "x": 492, "y": 54, "w": 80, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 80, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0044.png", + "frame": { "x": 336, "y": 0, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 83, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0045.png", + "frame": { "x": 0, "y": 0, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 85, "h": 54 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0046.png", + "frame": { "x": 170, "y": 0, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 83, "h": 55 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0047.png", + "frame": { "x": 0, "y": 54, "w": 80, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 80, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0048.png", + "frame": { "x": 336, "y": 54, "w": 78, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 78, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0049.png", + "frame": { "x": 78, "y": 110, "w": 76, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 76, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0050.png", + "frame": { "x": 492, "y": 109, "w": 78, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 78, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0051.png", + "frame": { "x": 306, "y": 111, "w": 80, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 4, "w": 80, "h": 53 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0052.png", + "frame": { "x": 306, "y": 164, "w": 83, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 10, "w": 83, "h": 47 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0053.png", + "frame": { "x": 472, "y": 201, "w": 90, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 19, "w": 90, "h": 38 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0054.png", + "frame": { "x": 472, "y": 165, "w": 96, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 21, "w": 96, "h": 36 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 167, "w": 96, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 21, "w": 96, "h": 36 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0056.png", + "frame": { "x": 96, "y": 168, "w": 96, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 21, "w": 96, "h": 36 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0057.png", + "frame": { "x": 192, "y": 168, "w": 96, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 21, "w": 96, "h": 36 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0058.png", + "frame": { "x": 96, "y": 168, "w": 96, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 21, "w": 96, "h": 36 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0059.png", + "frame": { "x": 0, "y": 167, "w": 96, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 21, "w": 96, "h": 36 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0060.png", + "frame": { "x": 0, "y": 203, "w": 90, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 19, "w": 90, "h": 38 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0061.png", + "frame": { "x": 389, "y": 164, "w": 83, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 10, "w": 83, "h": 47 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0062.png", + "frame": { "x": 386, "y": 111, "w": 80, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 4, "w": 80, "h": 53 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0063.png", + "frame": { "x": 0, "y": 110, "w": 78, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 78, "h": 56 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + }, + { + "filename": "0064.png", + "frame": { "x": 230, "y": 111, "w": 76, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 76, "h": 57 }, + "sourceSize": { "w": 96, "h": 57 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "770.png", + "format": "I8", + "size": { "w": 572, "h": 241 }, + "scale": "1", + "frameTags": [ + ], + "layers": [ + { "name": "Layer", "opacity": 255, "blendMode": "normal" } + ], + "slices": [ + ] + } } diff --git a/public/images/pokemon/shiny/770.png b/public/images/pokemon/shiny/770.png index 826658c19d2..778ab2c3ac5 100644 Binary files a/public/images/pokemon/shiny/770.png and b/public/images/pokemon/shiny/770.png differ diff --git a/public/images/pokemon/shiny/843.json b/public/images/pokemon/shiny/843.json index 3d34ff92111..40f78f893d9 100644 --- a/public/images/pokemon/shiny/843.json +++ b/public/images/pokemon/shiny/843.json @@ -1,41 +1,648 @@ -{ - "textures": [ - { - "image": "843.png", - "format": "RGBA8888", - "size": { - "w": 42, - "h": 42 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 42, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 42, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 42, - "h": 40 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:ac9209a149736e9deaf853869a248b2f:493730b1c2a96026a56d9b5052c92814:1ad579f7e215608104284deec571c282$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 165, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 42, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 172, "y": 166, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 42, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 214, "y": 166, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 42, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 256, "y": 166, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 42, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 128, "y": 126, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 43, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 128, "y": 166, "w": 44, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 44, "h": 39 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 86, "y": 86, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 44, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 43, "w": 46, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 46, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 193, "y": 42, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 45, "h": 41 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 130, "y": 86, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 44, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 225, "y": 86, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 44, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 216, "y": 126, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 43, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 42, "y": 128, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 43, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 0, "y": 165, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 42, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 172, "y": 166, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 42, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 214, "y": 166, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 42, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 256, "y": 166, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 42, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 128, "y": 126, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 43, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 128, "y": 166, "w": 44, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 44, "h": 39 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 86, "y": 86, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 44, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 0, "y": 43, "w": 46, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 46, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 193, "y": 42, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 45, "h": 41 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 130, "y": 86, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 44, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 225, "y": 86, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 44, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 216, "y": 126, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 43, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 42, "y": 128, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 43, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 0, "y": 165, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 42, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 172, "y": 166, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 42, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 214, "y": 166, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 42, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 256, "y": 166, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 42, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 128, "y": 126, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 43, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 128, "y": 166, "w": 44, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 44, "h": 39 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 86, "y": 86, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 44, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 0, "y": 43, "w": 46, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 46, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 193, "y": 42, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 45, "h": 41 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 130, "y": 86, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 44, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 225, "y": 86, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 44, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 216, "y": 126, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 43, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 42, "y": 128, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 43, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 0, "y": 165, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 42, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 172, "y": 166, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 42, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 214, "y": 166, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 42, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 256, "y": 166, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 42, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 128, "y": 126, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 43, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 128, "y": 166, "w": 44, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 44, "h": 39 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 86, "y": 86, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 44, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 0, "y": 43, "w": 46, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 46, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 193, "y": 42, "w": 45, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 45, "h": 41 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 130, "y": 86, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 44, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 225, "y": 86, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 44, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 216, "y": 126, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 43, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 42, "y": 128, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 43, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 0, "y": 165, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 42, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 0, "y": 83, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 44, "h": 41 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 193, "y": 0, "w": 46, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 46, "h": 42 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 99, "y": 0, "w": 48, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 48, "h": 42 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 0, "y": 0, "w": 50, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 50, "h": 43 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 50, "y": 0, "w": 49, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 49, "h": 43 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 147, "y": 0, "w": 46, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 46, "h": 43 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 239, "y": 0, "w": 44, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 44, "h": 43 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 99, "y": 42, "w": 42, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 42, "h": 44 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 46, "y": 43, "w": 42, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 42, "h": 43 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 141, "y": 43, "w": 42, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 42, "h": 43 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 238, "y": 43, "w": 42, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 42, "h": 43 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 183, "y": 83, "w": 42, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 42, "h": 42 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 44, "y": 86, "w": 42, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 42, "h": 42 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 0, "y": 124, "w": 42, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 42, "h": 41 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 174, "y": 125, "w": 42, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 42, "h": 41 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 86, "y": 126, "w": 42, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 42, "h": 41 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 85, "y": 167, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 42, "h": 40 }, + "sourceSize": { "w": 50, "h": 47 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "843.png", + "format": "I8", + "size": { "w": 298, "h": 207 }, + "scale": "1", + "frameTags": [ + ], + "layers": [ + { "name": "Layer", "opacity": 255, "blendMode": "normal" } + ], + "slices": [ + ] + } } diff --git a/public/images/pokemon/shiny/843.png b/public/images/pokemon/shiny/843.png index a76dce8e74d..bc78f828ecb 100644 Binary files a/public/images/pokemon/shiny/843.png and b/public/images/pokemon/shiny/843.png differ diff --git a/public/images/pokemon/shiny/844.json b/public/images/pokemon/shiny/844.json index fcbb69194d3..2421d17e37b 100644 --- a/public/images/pokemon/shiny/844.json +++ b/public/images/pokemon/shiny/844.json @@ -1,41 +1,1593 @@ -{ - "textures": [ - { - "image": "844.png", - "format": "RGBA8888", - "size": { - "w": 85, - "h": 85 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 85, - "h": 54 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 85, - "h": 54 - }, - "frame": { - "x": 0, - "y": 0, - "w": 85, - "h": 54 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:5147baf48fd1408bddc245055a932c76:33e64a65299e42479316bff477a9723c:791c04bd94958ea464eaa02b1a2ef466$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 163, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 83, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0002.png", + "frame": { "x": 0, "y": 163, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 83, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0003.png", + "frame": { "x": 172, "y": 0, "w": 85, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 85, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0004.png", + "frame": { "x": 172, "y": 0, "w": 85, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 85, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 0, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 86, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 0, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 86, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0007.png", + "frame": { "x": 86, "y": 0, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 86, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0008.png", + "frame": { "x": 86, "y": 0, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 86, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0009.png", + "frame": { "x": 342, "y": 54, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0010.png", + "frame": { "x": 342, "y": 54, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0011.png", + "frame": { "x": 427, "y": 54, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0012.png", + "frame": { "x": 0, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0013.png", + "frame": { "x": 0, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0014.png", + "frame": { "x": 85, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0015.png", + "frame": { "x": 170, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0016.png", + "frame": { "x": 170, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0017.png", + "frame": { "x": 255, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0018.png", + "frame": { "x": 254, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0019.png", + "frame": { "x": 0, "y": 163, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 250 + }, + { + "filename": "0020.png", + "frame": { "x": 0, "y": 163, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0021.png", + "frame": { "x": 340, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0022.png", + "frame": { "x": 340, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0023.png", + "frame": { "x": 343, "y": 0, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 86, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0024.png", + "frame": { "x": 343, "y": 0, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 86, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0025.png", + "frame": { "x": 425, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0026.png", + "frame": { "x": 425, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0027.png", + "frame": { "x": 85, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0028.png", + "frame": { "x": 0, "y": 109, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0029.png", + "frame": { "x": 0, "y": 109, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0030.png", + "frame": { "x": 429, "y": 0, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 86, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0031.png", + "frame": { "x": 257, "y": 0, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 86, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0032.png", + "frame": { "x": 257, "y": 54, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0033.png", + "frame": { "x": 85, "y": 109, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0034.png", + "frame": { "x": 338, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0035.png", + "frame": { "x": 338, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0036.png", + "frame": { "x": 422, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0037.png", + "frame": { "x": 422, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0038.png", + "frame": { "x": 0, "y": 163, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 83, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 250 + }, + { + "filename": "0039.png", + "frame": { "x": 0, "y": 163, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 83, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0040.png", + "frame": { "x": 172, "y": 0, "w": 85, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 85, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0041.png", + "frame": { "x": 172, "y": 0, "w": 85, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 85, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0042.png", + "frame": { "x": 0, "y": 0, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 86, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0043.png", + "frame": { "x": 0, "y": 0, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 86, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0044.png", + "frame": { "x": 86, "y": 0, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 86, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0045.png", + "frame": { "x": 86, "y": 0, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 86, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0046.png", + "frame": { "x": 342, "y": 54, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0047.png", + "frame": { "x": 342, "y": 54, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0048.png", + "frame": { "x": 427, "y": 54, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0049.png", + "frame": { "x": 0, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0050.png", + "frame": { "x": 0, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0051.png", + "frame": { "x": 85, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0052.png", + "frame": { "x": 170, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0053.png", + "frame": { "x": 170, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0054.png", + "frame": { "x": 255, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0055.png", + "frame": { "x": 254, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0056.png", + "frame": { "x": 0, "y": 163, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 250 + }, + { + "filename": "0057.png", + "frame": { "x": 0, "y": 163, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0058.png", + "frame": { "x": 340, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0059.png", + "frame": { "x": 340, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0060.png", + "frame": { "x": 343, "y": 0, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 86, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0061.png", + "frame": { "x": 343, "y": 0, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 86, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0062.png", + "frame": { "x": 425, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0063.png", + "frame": { "x": 425, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0064.png", + "frame": { "x": 85, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0065.png", + "frame": { "x": 0, "y": 109, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0066.png", + "frame": { "x": 0, "y": 109, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0067.png", + "frame": { "x": 429, "y": 0, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 86, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0068.png", + "frame": { "x": 257, "y": 0, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 86, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0069.png", + "frame": { "x": 257, "y": 54, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0070.png", + "frame": { "x": 85, "y": 109, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0071.png", + "frame": { "x": 338, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0072.png", + "frame": { "x": 338, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0073.png", + "frame": { "x": 422, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0074.png", + "frame": { "x": 422, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0075.png", + "frame": { "x": 0, "y": 163, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 83, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 250 + }, + { + "filename": "0076.png", + "frame": { "x": 0, "y": 163, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 83, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0077.png", + "frame": { "x": 172, "y": 0, "w": 85, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 85, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0078.png", + "frame": { "x": 172, "y": 0, "w": 85, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 85, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0079.png", + "frame": { "x": 0, "y": 0, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 86, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0080.png", + "frame": { "x": 0, "y": 0, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 86, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0081.png", + "frame": { "x": 86, "y": 0, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 86, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0082.png", + "frame": { "x": 86, "y": 0, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 86, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0083.png", + "frame": { "x": 342, "y": 54, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0084.png", + "frame": { "x": 342, "y": 54, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0085.png", + "frame": { "x": 427, "y": 54, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0086.png", + "frame": { "x": 0, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0087.png", + "frame": { "x": 0, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0088.png", + "frame": { "x": 85, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0089.png", + "frame": { "x": 170, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0090.png", + "frame": { "x": 170, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0091.png", + "frame": { "x": 255, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0092.png", + "frame": { "x": 254, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0093.png", + "frame": { "x": 0, "y": 163, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 250 + }, + { + "filename": "0094.png", + "frame": { "x": 0, "y": 163, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0095.png", + "frame": { "x": 340, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0096.png", + "frame": { "x": 340, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0097.png", + "frame": { "x": 343, "y": 0, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 86, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0098.png", + "frame": { "x": 343, "y": 0, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 86, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0099.png", + "frame": { "x": 425, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0100.png", + "frame": { "x": 425, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0101.png", + "frame": { "x": 85, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0102.png", + "frame": { "x": 0, "y": 109, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0103.png", + "frame": { "x": 0, "y": 109, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0104.png", + "frame": { "x": 429, "y": 0, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 86, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0105.png", + "frame": { "x": 257, "y": 0, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 86, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0106.png", + "frame": { "x": 257, "y": 54, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0107.png", + "frame": { "x": 85, "y": 109, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0108.png", + "frame": { "x": 338, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0109.png", + "frame": { "x": 338, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0110.png", + "frame": { "x": 422, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0111.png", + "frame": { "x": 422, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0112.png", + "frame": { "x": 0, "y": 163, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 83, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 250 + }, + { + "filename": "0113.png", + "frame": { "x": 0, "y": 163, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 83, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0114.png", + "frame": { "x": 172, "y": 0, "w": 85, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 85, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0115.png", + "frame": { "x": 172, "y": 0, "w": 85, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 85, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0116.png", + "frame": { "x": 0, "y": 0, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 86, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0117.png", + "frame": { "x": 0, "y": 0, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 86, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0118.png", + "frame": { "x": 86, "y": 0, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 86, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0119.png", + "frame": { "x": 86, "y": 0, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 86, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0120.png", + "frame": { "x": 342, "y": 54, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0121.png", + "frame": { "x": 342, "y": 54, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0122.png", + "frame": { "x": 427, "y": 54, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0123.png", + "frame": { "x": 0, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0124.png", + "frame": { "x": 0, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0125.png", + "frame": { "x": 85, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0126.png", + "frame": { "x": 170, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0127.png", + "frame": { "x": 170, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0128.png", + "frame": { "x": 255, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0129.png", + "frame": { "x": 254, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0130.png", + "frame": { "x": 0, "y": 163, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 250 + }, + { + "filename": "0131.png", + "frame": { "x": 0, "y": 163, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0132.png", + "frame": { "x": 340, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0133.png", + "frame": { "x": 340, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0134.png", + "frame": { "x": 343, "y": 0, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 86, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0135.png", + "frame": { "x": 343, "y": 0, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 86, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0136.png", + "frame": { "x": 425, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0137.png", + "frame": { "x": 425, "y": 108, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0138.png", + "frame": { "x": 85, "y": 55, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0139.png", + "frame": { "x": 0, "y": 109, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0140.png", + "frame": { "x": 0, "y": 109, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0141.png", + "frame": { "x": 429, "y": 0, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 86, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0142.png", + "frame": { "x": 257, "y": 0, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 86, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0143.png", + "frame": { "x": 257, "y": 54, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0144.png", + "frame": { "x": 85, "y": 109, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0145.png", + "frame": { "x": 338, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0146.png", + "frame": { "x": 338, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0147.png", + "frame": { "x": 422, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0148.png", + "frame": { "x": 422, "y": 162, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0149.png", + "frame": { "x": 0, "y": 163, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 83, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 350 + }, + { + "filename": "0150.png", + "frame": { "x": 0, "y": 163, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 83, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0151.png", + "frame": { "x": 164, "y": 163, "w": 82, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 82, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0152.png", + "frame": { "x": 164, "y": 163, "w": 82, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 82, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0153.png", + "frame": { "x": 407, "y": 216, "w": 80, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 80, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0154.png", + "frame": { "x": 407, "y": 216, "w": 80, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 80, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0155.png", + "frame": { "x": 164, "y": 217, "w": 79, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 79, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0156.png", + "frame": { "x": 164, "y": 217, "w": 79, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 79, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0157.png", + "frame": { "x": 80, "y": 218, "w": 78, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 6, "w": 78, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0158.png", + "frame": { "x": 80, "y": 218, "w": 78, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 6, "w": 78, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0159.png", + "frame": { "x": 243, "y": 270, "w": 76, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 6, "w": 76, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 150 + }, + { + "filename": "0160.png", + "frame": { "x": 243, "y": 270, "w": 76, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 6, "w": 76, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0161.png", + "frame": { "x": 158, "y": 271, "w": 74, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 6, "w": 74, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 250 + }, + { + "filename": "0162.png", + "frame": { "x": 158, "y": 271, "w": 74, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 6, "w": 74, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0163.png", + "frame": { "x": 319, "y": 271, "w": 73, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 6, "w": 73, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 400 + }, + { + "filename": "0164.png", + "frame": { "x": 319, "y": 271, "w": 73, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 6, "w": 73, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0165.png", + "frame": { "x": 0, "y": 271, "w": 75, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 5, "w": 75, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0166.png", + "frame": { "x": 407, "y": 270, "w": 76, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 76, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0167.png", + "frame": { "x": 328, "y": 216, "w": 79, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 1, "w": 79, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0168.png", + "frame": { "x": 0, "y": 217, "w": 80, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 80, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0169.png", + "frame": { "x": 83, "y": 163, "w": 81, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 81, "h": 55 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0170.png", + "frame": { "x": 246, "y": 216, "w": 82, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 82, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0171.png", + "frame": { "x": 85, "y": 109, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0172.png", + "frame": { "x": 85, "y": 109, "w": 85, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 85, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0173.png", + "frame": { "x": 170, "y": 109, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0174.png", + "frame": { "x": 170, "y": 109, "w": 84, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 84, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 50 + }, + { + "filename": "0175.png", + "frame": { "x": 0, "y": 163, "w": 83, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 83, "h": 54 }, + "sourceSize": { "w": 87, "h": 60 }, + "duration": 300 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "844.png", + "format": "I8", + "size": { "w": 515, "h": 325 }, + "scale": "1", + "frameTags": [ + ], + "layers": [ + { "name": "Layer", "opacity": 255, "blendMode": "normal" } + ], + "slices": [ + ] + } } diff --git a/public/images/pokemon/shiny/844.png b/public/images/pokemon/shiny/844.png index 91273e3172c..d1f9bd9efa8 100644 Binary files a/public/images/pokemon/shiny/844.png and b/public/images/pokemon/shiny/844.png differ diff --git a/public/images/pokemon/shiny/902-female.json b/public/images/pokemon/shiny/902-female.json index 33d636029a9..aec0bdbcc05 100644 --- a/public/images/pokemon/shiny/902-female.json +++ b/public/images/pokemon/shiny/902-female.json @@ -1,41 +1,828 @@ -{ - "textures": [ - { - "image": "902-female.png", - "format": "RGBA8888", - "size": { - "w": 86, - "h": 86 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 86, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 86, - "h": 51 - }, - "frame": { - "x": 0, - "y": 0, - "w": 86, - "h": 51 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:dad3964d81332e0c087ab5f0cb6deb8b:32e49e3ce0a6dfd7f659f430e882003a:16072dc598107c41afadd9df4d7c27da$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 582, "y": 294, "w": 86, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 86, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 170, "y": 341, "w": 83, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 83, "h": 52 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 253, "y": 341, "w": 79, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 21, "w": 79, "h": 54 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 413, "y": 343, "w": 73, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 22, "w": 73, "h": 56 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 347, "y": 68, "w": 76, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 23, "w": 76, "h": 58 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 503, "y": 289, "w": 79, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 25, "w": 79, "h": 57 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 594, "y": 238, "w": 81, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 28, "w": 81, "h": 56 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 87, "y": 77, "w": 84, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 30, "w": 84, "h": 55 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 77, "y": 189, "w": 88, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 31, "w": 88, "h": 53 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 0, "y": 242, "w": 91, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 29, "w": 91, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 438, "y": 185, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 28, "w": 94, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 535, "y": 133, "w": 97, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 26, "w": 97, "h": 52 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 323, "y": 188, "w": 94, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 25, "w": 94, "h": 50 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 503, "y": 238, "w": 91, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 22, "w": 91, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 91, "y": 257, "w": 90, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 21, "w": 90, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 582, "y": 294, "w": 86, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 86, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 170, "y": 341, "w": 83, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 83, "h": 52 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 253, "y": 341, "w": 79, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 21, "w": 79, "h": 54 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 413, "y": 343, "w": 73, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 22, "w": 73, "h": 56 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 347, "y": 68, "w": 76, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 23, "w": 76, "h": 58 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 503, "y": 289, "w": 79, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 25, "w": 79, "h": 57 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 594, "y": 238, "w": 81, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 28, "w": 81, "h": 56 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 87, "y": 77, "w": 84, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 30, "w": 84, "h": 55 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 77, "y": 189, "w": 88, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 31, "w": 88, "h": 53 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 0, "y": 242, "w": 91, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 29, "w": 91, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 438, "y": 185, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 28, "w": 94, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 535, "y": 133, "w": 97, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 26, "w": 97, "h": 52 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 323, "y": 188, "w": 94, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 25, "w": 94, "h": 50 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 503, "y": 238, "w": 91, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 22, "w": 91, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 91, "y": 257, "w": 90, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 21, "w": 90, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 582, "y": 294, "w": 86, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 86, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 170, "y": 341, "w": 83, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 83, "h": 52 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 253, "y": 341, "w": 79, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 21, "w": 79, "h": 54 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 413, "y": 343, "w": 73, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 22, "w": 73, "h": 56 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 347, "y": 68, "w": 76, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 23, "w": 76, "h": 58 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 503, "y": 289, "w": 79, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 25, "w": 79, "h": 57 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 594, "y": 238, "w": 81, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 28, "w": 81, "h": 56 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 87, "y": 77, "w": 84, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 30, "w": 84, "h": 55 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 77, "y": 189, "w": 88, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 31, "w": 88, "h": 53 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 0, "y": 242, "w": 91, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 29, "w": 91, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 438, "y": 185, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 28, "w": 94, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 535, "y": 133, "w": 97, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 26, "w": 97, "h": 52 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 323, "y": 188, "w": 94, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 25, "w": 94, "h": 50 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 503, "y": 238, "w": 91, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 22, "w": 91, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 91, "y": 257, "w": 90, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 21, "w": 90, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 582, "y": 294, "w": 86, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 86, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 170, "y": 341, "w": 83, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 83, "h": 52 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 253, "y": 341, "w": 79, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 21, "w": 79, "h": 54 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 413, "y": 343, "w": 73, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 22, "w": 73, "h": 56 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 347, "y": 68, "w": 76, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 23, "w": 76, "h": 58 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 503, "y": 289, "w": 79, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 25, "w": 79, "h": 57 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 594, "y": 238, "w": 81, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 28, "w": 81, "h": 56 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 87, "y": 77, "w": 84, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 30, "w": 84, "h": 55 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 77, "y": 189, "w": 88, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 31, "w": 88, "h": 53 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 242, "w": 91, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 29, "w": 91, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 438, "y": 185, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 28, "w": 94, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 535, "y": 133, "w": 97, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 26, "w": 97, "h": 52 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 323, "y": 188, "w": 94, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 25, "w": 94, "h": 50 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 503, "y": 238, "w": 91, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 22, "w": 91, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 91, "y": 257, "w": 90, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 21, "w": 90, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 0, "y": 293, "w": 86, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 86, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 253, "y": 238, "w": 91, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 91, "h": 51 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 438, "y": 133, "w": 97, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 17, "w": 97, "h": 52 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 181, "y": 289, "w": 88, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 14, "w": 88, "h": 52 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 332, "y": 343, "w": 81, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 11, "w": 81, "h": 52 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 86, "y": 308, "w": 84, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 8, "w": 84, "h": 52 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 357, "y": 290, "w": 84, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 84, "h": 53 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 417, "y": 236, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 6, "w": 86, "h": 54 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 0, "y": 76, "w": 87, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 2, "w": 87, "h": 60 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 340, "y": 0, "w": 85, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 0, "w": 85, "h": 68 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 87, "y": 0, "w": 85, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 85, "h": 77 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 262, "y": 0, "w": 78, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 78, "h": 76 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 178, "y": 133, "w": 71, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 8, "w": 71, "h": 71 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 518, "y": 0, "w": 80, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 7, "w": 80, "h": 72 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 0, "y": 0, "w": 87, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 87, "h": 76 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 598, "y": 0, "w": 80, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 80, "h": 71 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 249, "y": 134, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 13, "w": 74, "h": 67 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 425, "y": 62, "w": 82, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 82, "h": 69 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 172, "y": 0, "w": 90, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 90, "h": 68 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 172, "y": 68, "w": 84, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 14, "w": 84, "h": 65 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 0, "y": 136, "w": 77, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 14, "w": 77, "h": 64 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 598, "y": 71, "w": 81, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 16, "w": 81, "h": 61 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 507, "y": 72, "w": 88, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 15, "w": 88, "h": 61 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 425, "y": 0, "w": 93, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 14, "w": 93, "h": 62 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 256, "y": 76, "w": 91, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 17, "w": 91, "h": 58 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 347, "y": 131, "w": 91, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 17, "w": 91, "h": 57 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 87, "y": 133, "w": 91, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 18, "w": 91, "h": 56 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 532, "y": 185, "w": 89, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 19, "w": 89, "h": 53 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 165, "y": 204, "w": 88, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 19, "w": 88, "h": 53 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 269, "y": 289, "w": 88, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 19, "w": 88, "h": 52 }, + "sourceSize": { "w": 110, "h": 85 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "902-female.png", + "format": "I8", + "size": { "w": 679, "h": 399 }, + "scale": "1", + "frameTags": [ + ], + "layers": [ + { "name": "Layer", "opacity": 255, "blendMode": "normal" } + ], + "slices": [ + ] + } } diff --git a/public/images/pokemon/shiny/902-female.png b/public/images/pokemon/shiny/902-female.png index 45d3f157f31..e6807b123b6 100644 Binary files a/public/images/pokemon/shiny/902-female.png and b/public/images/pokemon/shiny/902-female.png differ diff --git a/public/images/pokemon/shiny/902.json b/public/images/pokemon/shiny/902.json index a7ad9b6677a..2e788b240c8 100644 --- a/public/images/pokemon/shiny/902.json +++ b/public/images/pokemon/shiny/902.json @@ -1,41 +1,828 @@ -{ - "textures": [ - { - "image": "902.png", - "format": "RGBA8888", - "size": { - "w": 86, - "h": 86 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 86, - "h": 54 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 86, - "h": 54 - }, - "frame": { - "x": 0, - "y": 0, - "w": 86, - "h": 54 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:f03a04a2fab39b77fb2f965828a1e018:c346d0483fc16c34aa0d7aa89d007f98:7d196ae78ad956c5eb9131e145b5922f$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 510, "y": 305, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 86, "h": 54 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 0, "y": 306, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 83, "h": 55 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 422, "y": 353, "w": 79, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 21, "w": 79, "h": 56 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 257, "y": 356, "w": 73, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 22, "w": 73, "h": 59 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 596, "y": 305, "w": 76, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 23, "w": 76, "h": 61 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 178, "y": 298, "w": 79, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 25, "w": 79, "h": 60 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 257, "y": 298, "w": 81, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 28, "w": 81, "h": 58 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 594, "y": 194, "w": 84, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 30, "w": 84, "h": 57 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 165, "y": 204, "w": 88, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 31, "w": 88, "h": 55 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 74, "y": 199, "w": 91, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 29, "w": 91, "h": 54 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 409, "y": 190, "w": 94, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 28, "w": 94, "h": 53 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 448, "y": 138, "w": 97, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 26, "w": 97, "h": 52 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 497, "y": 248, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 25, "w": 94, "h": 51 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 253, "y": 245, "w": 91, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 22, "w": 91, "h": 53 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 0, "y": 253, "w": 90, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 21, "w": 90, "h": 53 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 510, "y": 305, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 86, "h": 54 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 306, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 83, "h": 55 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 422, "y": 353, "w": 79, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 21, "w": 79, "h": 56 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 257, "y": 356, "w": 73, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 22, "w": 73, "h": 59 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 596, "y": 305, "w": 76, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 23, "w": 76, "h": 61 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 178, "y": 298, "w": 79, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 25, "w": 79, "h": 60 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 257, "y": 298, "w": 81, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 28, "w": 81, "h": 58 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 594, "y": 194, "w": 84, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 30, "w": 84, "h": 57 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 165, "y": 204, "w": 88, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 31, "w": 88, "h": 55 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 74, "y": 199, "w": 91, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 29, "w": 91, "h": 54 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 409, "y": 190, "w": 94, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 28, "w": 94, "h": 53 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 448, "y": 138, "w": 97, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 26, "w": 97, "h": 52 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 497, "y": 248, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 25, "w": 94, "h": 51 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 253, "y": 245, "w": 91, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 22, "w": 91, "h": 53 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 0, "y": 253, "w": 90, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 21, "w": 90, "h": 53 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 510, "y": 305, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 86, "h": 54 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 0, "y": 306, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 83, "h": 55 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 422, "y": 353, "w": 79, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 21, "w": 79, "h": 56 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 257, "y": 356, "w": 73, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 22, "w": 73, "h": 59 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 596, "y": 305, "w": 76, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 23, "w": 76, "h": 61 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 178, "y": 298, "w": 79, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 25, "w": 79, "h": 60 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 257, "y": 298, "w": 81, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 28, "w": 81, "h": 58 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 594, "y": 194, "w": 84, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 30, "w": 84, "h": 57 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 165, "y": 204, "w": 88, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 31, "w": 88, "h": 55 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 74, "y": 199, "w": 91, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 29, "w": 91, "h": 54 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 409, "y": 190, "w": 94, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 28, "w": 94, "h": 53 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 448, "y": 138, "w": 97, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 26, "w": 97, "h": 52 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 497, "y": 248, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 25, "w": 94, "h": 51 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 253, "y": 245, "w": 91, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 22, "w": 91, "h": 53 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 0, "y": 253, "w": 90, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 21, "w": 90, "h": 53 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 510, "y": 305, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 86, "h": 54 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 0, "y": 306, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 83, "h": 55 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 422, "y": 353, "w": 79, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 21, "w": 79, "h": 56 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 257, "y": 356, "w": 73, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 22, "w": 73, "h": 59 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 596, "y": 305, "w": 76, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 23, "w": 76, "h": 61 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 178, "y": 298, "w": 79, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 25, "w": 79, "h": 60 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 257, "y": 298, "w": 81, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 28, "w": 81, "h": 58 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 594, "y": 194, "w": 84, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 30, "w": 84, "h": 57 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 165, "y": 204, "w": 88, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 31, "w": 88, "h": 55 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 74, "y": 199, "w": 91, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 29, "w": 91, "h": 54 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 409, "y": 190, "w": 94, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 28, "w": 94, "h": 53 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 448, "y": 138, "w": 97, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 26, "w": 97, "h": 52 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 497, "y": 248, "w": 94, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 25, "w": 94, "h": 51 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 253, "y": 245, "w": 91, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 22, "w": 91, "h": 53 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 0, "y": 253, "w": 90, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 21, "w": 90, "h": 53 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 424, "y": 299, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 86, "h": 54 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 503, "y": 194, "w": 91, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 91, "h": 54 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 351, "y": 136, "w": 97, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 17, "w": 97, "h": 53 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 591, "y": 251, "w": 88, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 14, "w": 88, "h": 54 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 167, "y": 358, "w": 81, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 11, "w": 81, "h": 53 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 338, "y": 352, "w": 84, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 8, "w": 84, "h": 53 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 83, "y": 313, "w": 84, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 84, "h": 53 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 338, "y": 298, "w": 86, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 6, "w": 86, "h": 54 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 586, "y": 134, "w": 87, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 2, "w": 87, "h": 60 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 513, "y": 0, "w": 85, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 0, "w": 85, "h": 70 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 87, "y": 0, "w": 85, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 85, "h": 80 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 262, "y": 0, "w": 78, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 78, "h": 79 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 91, "y": 80, "w": 71, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 8, "w": 71, "h": 74 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 340, "y": 0, "w": 80, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 7, "w": 80, "h": 75 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 0, "y": 0, "w": 87, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 87, "h": 79 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 598, "y": 0, "w": 80, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 80, "h": 73 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 0, "y": 138, "w": 74, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 13, "w": 74, "h": 69 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 420, "y": 64, "w": 82, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 82, "h": 72 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 172, "y": 0, "w": 90, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 90, "h": 71 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 502, "y": 70, "w": 84, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 14, "w": 84, "h": 68 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 243, "y": 138, "w": 77, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 14, "w": 77, "h": 66 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 162, "y": 135, "w": 81, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 16, "w": 81, "h": 64 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 172, "y": 71, "w": 88, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 15, "w": 88, "h": 64 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 420, "y": 0, "w": 93, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 14, "w": 93, "h": 64 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 586, "y": 73, "w": 91, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 17, "w": 91, "h": 61 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 260, "y": 79, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 17, "w": 91, "h": 59 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 0, "y": 80, "w": 91, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 18, "w": 91, "h": 58 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 320, "y": 189, "w": 89, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 19, "w": 89, "h": 56 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 409, "y": 243, "w": 88, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 19, "w": 88, "h": 55 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 90, "y": 259, "w": 88, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 19, "w": 88, "h": 54 }, + "sourceSize": { "w": 110, "h": 87 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "902.png", + "format": "I8", + "size": { "w": 679, "h": 415 }, + "scale": "1", + "frameTags": [ + ], + "layers": [ + { "name": "Layer", "opacity": 255, "blendMode": "normal" } + ], + "slices": [ + ] + } } diff --git a/public/images/pokemon/shiny/902.png b/public/images/pokemon/shiny/902.png index 32f71756ae2..11e26c7813f 100644 Binary files a/public/images/pokemon/shiny/902.png and b/public/images/pokemon/shiny/902.png differ diff --git a/public/images/pokemon/variant/_exp_masterlist.json b/public/images/pokemon/variant/_exp_masterlist.json index e2fe24007ff..1fd0fc183f5 100644 --- a/public/images/pokemon/variant/_exp_masterlist.json +++ b/public/images/pokemon/variant/_exp_masterlist.json @@ -132,7 +132,6 @@ "763": [0, 1, 1], "767": [0, 1, 1], "768": [0, 1, 1], - "770": [0, 0, 0], "771": [0, 2, 2], "772": [0, 1, 1], "773-fighting": [0, 1, 1], diff --git a/public/images/trainer/rocket_boss_giovanni_1.json b/public/images/trainer/rocket_boss_giovanni_1.json new file mode 100644 index 00000000000..a53be1a20e8 --- /dev/null +++ b/public/images/trainer/rocket_boss_giovanni_1.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "rocket_boss_giovanni_1.png", + "format": "RGBA8888", + "size": { + "w": 79, + "h": 79 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 39, + "h": 79 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 39, + "h": 79 + }, + "frame": { + "x": 0, + "y": 0, + "w": 39, + "h": 79 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:d6c5e1804414106d43a7c46f83468d39:1f3f7898a58950988acac6ee7167e012:5f742cbdaafcd5ae864f18ec2af7512a$" + } +} diff --git a/public/images/trainer/rocket_boss_giovanni_1.png b/public/images/trainer/rocket_boss_giovanni_1.png new file mode 100644 index 00000000000..8adab2d0575 Binary files /dev/null and b/public/images/trainer/rocket_boss_giovanni_1.png differ diff --git a/public/images/ui/champion_ribbon.png b/public/images/ui/champion_ribbon.png index 533c20f6821..d70aa92daaf 100644 Binary files a/public/images/ui/champion_ribbon.png and b/public/images/ui/champion_ribbon.png differ diff --git a/public/images/ui/champion_ribbon_bronze.png b/public/images/ui/champion_ribbon_bronze.png new file mode 100644 index 00000000000..8d92b6e0ab1 Binary files /dev/null and b/public/images/ui/champion_ribbon_bronze.png differ diff --git a/public/images/ui/champion_ribbon_diamond.png b/public/images/ui/champion_ribbon_diamond.png new file mode 100644 index 00000000000..9effbe3669c Binary files /dev/null and b/public/images/ui/champion_ribbon_diamond.png differ diff --git a/public/images/ui/champion_ribbon_emerald.png b/public/images/ui/champion_ribbon_emerald.png new file mode 100644 index 00000000000..81b111a05a9 Binary files /dev/null and b/public/images/ui/champion_ribbon_emerald.png differ diff --git a/public/images/ui/champion_ribbon_silver.png b/public/images/ui/champion_ribbon_silver.png new file mode 100644 index 00000000000..c4dcd8d7be0 Binary files /dev/null and b/public/images/ui/champion_ribbon_silver.png differ diff --git a/public/images/ui/legacy/champion_ribbon.png b/public/images/ui/legacy/champion_ribbon.png index 533c20f6821..d70aa92daaf 100644 Binary files a/public/images/ui/legacy/champion_ribbon.png and b/public/images/ui/legacy/champion_ribbon.png differ diff --git a/public/images/ui/legacy/champion_ribbon_bronze.png b/public/images/ui/legacy/champion_ribbon_bronze.png new file mode 100644 index 00000000000..8d92b6e0ab1 Binary files /dev/null and b/public/images/ui/legacy/champion_ribbon_bronze.png differ diff --git a/public/images/ui/legacy/champion_ribbon_diamond.png b/public/images/ui/legacy/champion_ribbon_diamond.png new file mode 100644 index 00000000000..9effbe3669c Binary files /dev/null and b/public/images/ui/legacy/champion_ribbon_diamond.png differ diff --git a/public/images/ui/legacy/champion_ribbon_emerald.png b/public/images/ui/legacy/champion_ribbon_emerald.png new file mode 100644 index 00000000000..81b111a05a9 Binary files /dev/null and b/public/images/ui/legacy/champion_ribbon_emerald.png differ diff --git a/public/images/ui/legacy/champion_ribbon_silver.png b/public/images/ui/legacy/champion_ribbon_silver.png new file mode 100644 index 00000000000..c4dcd8d7be0 Binary files /dev/null and b/public/images/ui/legacy/champion_ribbon_silver.png differ diff --git a/public/images/ui/legacy/summary_moves_effect.png b/public/images/ui/legacy/summary_moves_effect.png index 34d59970c99..61567c9749b 100644 Binary files a/public/images/ui/legacy/summary_moves_effect.png and b/public/images/ui/legacy/summary_moves_effect.png differ diff --git a/public/images/ui/party_bg_double_manage.png b/public/images/ui/party_bg_double_manage.png index e85413b5fb5..f1561422867 100644 Binary files a/public/images/ui/party_bg_double_manage.png and b/public/images/ui/party_bg_double_manage.png differ diff --git a/public/images/ui/party_slot_main_short.json b/public/images/ui/party_slot_main_short.json new file mode 100644 index 00000000000..d738d524a5b --- /dev/null +++ b/public/images/ui/party_slot_main_short.json @@ -0,0 +1,146 @@ +{ + "textures": [ + { + "image": "party_slot_main_short.png", + "format": "RGBA8888", + "size": { + "w": 110, + "h": 294 + }, + "scale": 1, + "frames": [ + { + "filename": "party_slot_main_short", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 110, + "h": 41 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 110, + "h": 41 + }, + "frame": { + "x": 0, + "y": 0, + "w": 110, + "h": 41 + } + }, + { + "filename": "party_slot_main_short_sel", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 110, + "h": 41 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 110, + "h": 41 + }, + "frame": { + "x": 0, + "y": 41, + "w": 110, + "h": 41 + } + }, + { + "filename": "party_slot_main_short_fnt", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 110, + "h": 41 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 110, + "h": 41 + }, + "frame": { + "x": 0, + "y": 82, + "w": 110, + "h": 41 + } + }, + { + "filename": "party_slot_main_short_fnt_sel", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 110, + "h": 41 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 110, + "h": 41 + }, + "frame": { + "x": 0, + "y": 123, + "w": 110, + "h": 41 + } + }, + { + "filename": "party_slot_main_short_swap", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 110, + "h": 41 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 110, + "h": 41 + }, + "frame": { + "x": 0, + "y": 164, + "w": 110, + "h": 41 + } + }, + { + "filename": "party_slot_main_short_swap_sel", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 110, + "h": 41 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 110, + "h": 41 + }, + "frame": { + "x": 0, + "y": 205, + "w": 110, + "h": 41 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:29685f2f538901cf5bf7f0ed2ea867c3:a080ea6c8cccd1e03244214053e79796:565f7afc5ca419b6ba8dbce51ea30818$" + } +} diff --git a/public/images/ui/party_slot_main_short.png b/public/images/ui/party_slot_main_short.png new file mode 100644 index 00000000000..4a4ef9ae937 Binary files /dev/null and b/public/images/ui/party_slot_main_short.png differ diff --git a/public/images/ui/summary_moves_effect.png b/public/images/ui/summary_moves_effect.png index 5b1cef9c02e..7993cd0ad57 100644 Binary files a/public/images/ui/summary_moves_effect.png and b/public/images/ui/summary_moves_effect.png differ diff --git a/public/locales b/public/locales index 7898c0018a7..1ea8f865e30 160000 --- a/public/locales +++ b/public/locales @@ -1 +1 @@ -Subproject commit 7898c0018a70601a6ead76c9dd497ff966cc2e2a +Subproject commit 1ea8f865e30d1940caa0fceeabf37ae2e4689471 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/dex-data.ts b/src/@types/dex-data.ts index 88cc16886bd..005e8034b18 100644 --- a/src/@types/dex-data.ts +++ b/src/@types/dex-data.ts @@ -1,3 +1,5 @@ +import type { RibbonData } from "#system/ribbons/ribbon-data"; + export interface DexData { [key: number]: DexEntry; } @@ -10,4 +12,5 @@ export interface DexEntry { caughtCount: number; hatchedCount: number; ivs: number[]; + ribbons: RibbonData; } diff --git a/src/@types/helpers/type-helpers.ts b/src/@types/helpers/type-helpers.ts index 7ad20b88956..0be391aa3c4 100644 --- a/src/@types/helpers/type-helpers.ts +++ b/src/@types/helpers/type-helpers.ts @@ -103,3 +103,12 @@ export type CoerceNullPropertiesToUndefined = { * @typeParam T - The type to render partial */ export type AtLeastOne = Partial & ObjectValues<{ [K in keyof T]: Pick, K> }>; + +/** Type helper that adds a brand to a type, used for nominal typing. + * + * @remarks + * Brands should be either a string or unique symbol. This prevents overlap with other types. + */ +export declare class Brander { + private __brand: B; +} diff --git a/src/@types/move-types.ts b/src/@types/move-types.ts index 5f8d7e8777e..1def61f1329 100644 --- a/src/@types/move-types.ts +++ b/src/@types/move-types.ts @@ -1,13 +1,24 @@ +import type { Pokemon } from "#field/pokemon"; import type { AttackMove, ChargingAttackMove, ChargingSelfStatusMove, + Move, MoveAttr, MoveAttrConstructorMap, SelfStatusMove, StatusMove, } from "#moves/move"; +/** + * A generic function producing a message during a Move's execution. + * @param user - The {@linkcode Pokemon} using the move + * @param target - The {@linkcode Pokemon} targeted by the move + * @param move - The {@linkcode Move} being used + * @returns a string + */ +export type MoveMessageFunc = (user: Pokemon, target: Pokemon, move: Move) => string; + export type MoveAttrFilter = (attr: MoveAttr) => boolean; export type * from "#moves/move"; @@ -16,7 +27,7 @@ export type * from "#moves/move"; * Map of move subclass names to their respective classes. * Does not include the ChargeMove subclasses. For that, use `ChargingMoveClassMap`. * - * @privateremarks + * @privateRemarks * The `never` field (`declare private _: never`) in some classes is necessary * to ensure typescript does not improperly narrow a failed `is` guard to `never`. * diff --git a/src/account.ts b/src/account.ts index b01691ce940..c97721889ae 100644 --- a/src/account.ts +++ b/src/account.ts @@ -17,45 +17,42 @@ export function initLoggedInUser(): void { }; } -export function updateUserInfo(): Promise<[boolean, number]> { - return new Promise<[boolean, number]>(resolve => { - if (bypassLogin) { - loggedInUser = { - username: "Guest", - lastSessionSlot: -1, - discordId: "", - googleId: "", - hasAdminRole: false, - }; - let lastSessionSlot = -1; - for (let s = 0; s < 5; s++) { - if (localStorage.getItem(`sessionData${s ? s : ""}_${loggedInUser.username}`)) { - lastSessionSlot = s; - break; - } +export async function updateUserInfo(): Promise<[boolean, number]> { + if (bypassLogin) { + loggedInUser = { + username: "Guest", + lastSessionSlot: -1, + discordId: "", + googleId: "", + hasAdminRole: false, + }; + let lastSessionSlot = -1; + for (let s = 0; s < 5; s++) { + if (localStorage.getItem(`sessionData${s ? s : ""}_${loggedInUser.username}`)) { + lastSessionSlot = s; + break; } - loggedInUser.lastSessionSlot = lastSessionSlot; - // Migrate old data from before the username was appended - ["data", "sessionData", "sessionData1", "sessionData2", "sessionData3", "sessionData4"].map(d => { - const lsItem = localStorage.getItem(d); - if (lsItem && !!loggedInUser?.username) { - const lsUserItem = localStorage.getItem(`${d}_${loggedInUser.username}`); - if (lsUserItem) { - localStorage.setItem(`${d}_${loggedInUser.username}_bak`, lsUserItem); - } - localStorage.setItem(`${d}_${loggedInUser.username}`, lsItem); - localStorage.removeItem(d); - } - }); - return resolve([true, 200]); } - pokerogueApi.account.getInfo().then(([accountInfo, status]) => { - if (!accountInfo) { - resolve([false, status]); - return; + loggedInUser.lastSessionSlot = lastSessionSlot; + // Migrate old data from before the username was appended + ["data", "sessionData", "sessionData1", "sessionData2", "sessionData3", "sessionData4"].forEach(d => { + const lsItem = localStorage.getItem(d); + if (lsItem && !!loggedInUser?.username) { + const lsUserItem = localStorage.getItem(`${d}_${loggedInUser.username}`); + if (lsUserItem) { + localStorage.setItem(`${d}_${loggedInUser.username}_bak`, lsUserItem); + } + localStorage.setItem(`${d}_${loggedInUser.username}`, lsItem); + localStorage.removeItem(d); } - loggedInUser = accountInfo; - resolve([true, 200]); }); - }); + return [true, 200]; + } + + const [accountInfo, status] = await pokerogueApi.account.getInfo(); + if (!accountInfo) { + return [false, status]; + } + loggedInUser = accountInfo; + return [true, 200]; } diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 8c8906be2b0..4d3f190c02a 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -27,13 +27,7 @@ import { UiInputs } from "#app/ui-inputs"; import { biomeDepths, getBiomeName } from "#balance/biomes"; import { pokemonPrevolutions } from "#balance/pokemon-evolutions"; import { FRIENDSHIP_GAIN_FROM_BATTLE } from "#balance/starters"; -import { - initCommonAnims, - initMoveAnim, - loadCommonAnimAssets, - loadMoveAnimAssets, - populateAnims, -} from "#data/battle-anims"; +import { initCommonAnims, initMoveAnim, loadCommonAnimAssets, loadMoveAnimAssets } from "#data/battle-anims"; import { allAbilities, allMoves, allSpecies, modifierTypes } from "#data/data-lists"; import { battleSpecDialogue } from "#data/dialogue"; import type { SpeciesFormChangeTrigger } from "#data/form-change-triggers"; @@ -104,6 +98,7 @@ import { getLuckString, getLuckTextTint, getPartyLuckValue, + type ModifierType, PokemonHeldItemModifierType, } from "#modifiers/modifier-type"; import { MysteryEncounter } from "#mystery-encounters/mystery-encounter"; @@ -242,8 +237,8 @@ export class BattleScene extends SceneBase { public battleStyle: BattleStyle = BattleStyle.SWITCH; /** * Defines whether or not to show type effectiveness hints - * - true: No hints - * - false: Show hints for moves + * - true: Show hints for moves + * - false: No hints */ public typeHints = false; @@ -387,7 +382,6 @@ export class BattleScene extends SceneBase { const defaultMoves = [MoveId.TACKLE, MoveId.TAIL_WHIP, MoveId.FOCUS_ENERGY, MoveId.STRUGGLE]; await Promise.all([ - populateAnims(), this.initVariantData(), initCommonAnims().then(() => loadCommonAnimAssets(true)), Promise.all(defaultMoves.map(m => initMoveAnim(m))).then(() => loadMoveAnimAssets(defaultMoves, true)), @@ -478,8 +472,8 @@ export class BattleScene extends SceneBase { this.uiContainer = uiContainer; - const overlayWidth = this.game.canvas.width / 6; - const overlayHeight = this.game.canvas.height / 6 - 48; + const overlayWidth = this.scaledCanvas.width; + const overlayHeight = this.scaledCanvas.height - 48; this.fieldOverlay = this.add.rectangle(0, overlayHeight * -1 - 48, overlayWidth, overlayHeight, 0x424242); this.fieldOverlay.setName("rect-field-overlay"); this.fieldOverlay.setOrigin(0, 0); @@ -537,34 +531,29 @@ export class BattleScene extends SceneBase { this.candyBar.setup(); this.fieldUI.add(this.candyBar); - this.biomeWaveText = addTextObject( - this.game.canvas.width / 6 - 2, - 0, - startingWave.toString(), - TextStyle.BATTLE_INFO, - ); + this.biomeWaveText = addTextObject(this.scaledCanvas.width - 2, 0, startingWave.toString(), TextStyle.BATTLE_INFO); this.biomeWaveText.setName("text-biome-wave"); this.biomeWaveText.setOrigin(1, 0.5); this.fieldUI.add(this.biomeWaveText); - this.moneyText = addTextObject(this.game.canvas.width / 6 - 2, 0, "", TextStyle.MONEY); + this.moneyText = addTextObject(this.scaledCanvas.width - 2, 0, "", TextStyle.MONEY); this.moneyText.setName("text-money"); this.moneyText.setOrigin(1, 0.5); this.fieldUI.add(this.moneyText); - this.scoreText = addTextObject(this.game.canvas.width / 6 - 2, 0, "", TextStyle.PARTY, { fontSize: "54px" }); + this.scoreText = addTextObject(this.scaledCanvas.width - 2, 0, "", TextStyle.PARTY, { fontSize: "54px" }); this.scoreText.setName("text-score"); this.scoreText.setOrigin(1, 0.5); this.fieldUI.add(this.scoreText); - this.luckText = addTextObject(this.game.canvas.width / 6 - 2, 0, "", TextStyle.PARTY, { fontSize: "54px" }); + this.luckText = addTextObject(this.scaledCanvas.width - 2, 0, "", TextStyle.PARTY, { fontSize: "54px" }); this.luckText.setName("text-luck"); this.luckText.setOrigin(1, 0.5); this.luckText.setVisible(false); this.fieldUI.add(this.luckText); this.luckLabelText = addTextObject( - this.game.canvas.width / 6 - 2, + this.scaledCanvas.width - 2, 0, i18next.t("common:luckIndicator"), TextStyle.PARTY, @@ -586,10 +575,7 @@ export class BattleScene extends SceneBase { this.spriteSparkleHandler = new PokemonSpriteSparkleHandler(); this.spriteSparkleHandler.setup(); - this.pokemonInfoContainer = new PokemonInfoContainer( - this.game.canvas.width / 6 + 52, - -(this.game.canvas.height / 6) + 66, - ); + this.pokemonInfoContainer = new PokemonInfoContainer(this.scaledCanvas.width + 52, -this.scaledCanvas.height + 66); this.pokemonInfoContainer.setup(); this.fieldUI.add(this.pokemonInfoContainer); @@ -951,17 +937,17 @@ export class BattleScene extends SceneBase { dataSource?: PokemonData, postProcess?: (enemyPokemon: EnemyPokemon) => void, ): EnemyPokemon { - if (Overrides.OPP_LEVEL_OVERRIDE > 0) { - level = Overrides.OPP_LEVEL_OVERRIDE; + if (Overrides.ENEMY_LEVEL_OVERRIDE > 0) { + level = Overrides.ENEMY_LEVEL_OVERRIDE; } - if (Overrides.OPP_SPECIES_OVERRIDE) { - species = getPokemonSpecies(Overrides.OPP_SPECIES_OVERRIDE); + if (Overrides.ENEMY_SPECIES_OVERRIDE) { + species = getPokemonSpecies(Overrides.ENEMY_SPECIES_OVERRIDE); // The fact that a Pokemon is a boss or not can change based on its Species and level boss = this.getEncounterBossSegments(this.currentBattle.waveIndex, level, species) > 1; } const pokemon = new EnemyPokemon(species, level, trainerSlot, boss, shinyLock, dataSource); - if (Overrides.OPP_FUSION_OVERRIDE) { + if (Overrides.ENEMY_FUSION_OVERRIDE) { pokemon.generateFusionSpecies(); } @@ -1211,7 +1197,9 @@ export class BattleScene extends SceneBase { this.updateScoreText(); this.scoreText.setVisible(false); - [this.luckLabelText, this.luckText].map(t => t.setVisible(false)); + [this.luckLabelText, this.luckText].forEach(t => { + t.setVisible(false); + }); this.newArena(Overrides.STARTING_BIOME_OVERRIDE || BiomeId.TOWN); @@ -1245,8 +1233,7 @@ export class BattleScene extends SceneBase { Object.values(mp) .flat() .map(mt => mt.modifierType) - .filter(mt => "localize" in mt) - .map(lpb => lpb as unknown as Localizable), + .filter((mt): mt is ModifierType & Localizable => "localize" in mt && typeof mt.localize === "function"), ), ]; for (const item of localizable) { @@ -1521,8 +1508,8 @@ export class BattleScene extends SceneBase { return this.currentBattle; } - newArena(biome: BiomeId, playerFaints?: number): Arena { - this.arena = new Arena(biome, BiomeId[biome].toLowerCase(), playerFaints); + newArena(biome: BiomeId, playerFaints = 0): Arena { + this.arena = new Arena(biome, playerFaints); this.eventTarget.dispatchEvent(new NewArenaEvent()); this.arenaBg.pipelineData = { @@ -1772,10 +1759,10 @@ export class BattleScene extends SceneBase { } getEncounterBossSegments(waveIndex: number, level: number, species?: PokemonSpecies, forceBoss = false): number { - if (Overrides.OPP_HEALTH_SEGMENTS_OVERRIDE > 1) { - return Overrides.OPP_HEALTH_SEGMENTS_OVERRIDE; + if (Overrides.ENEMY_HEALTH_SEGMENTS_OVERRIDE > 1) { + return Overrides.ENEMY_HEALTH_SEGMENTS_OVERRIDE; } - if (Overrides.OPP_HEALTH_SEGMENTS_OVERRIDE === 1) { + if (Overrides.ENEMY_HEALTH_SEGMENTS_OVERRIDE === 1) { // The rest of the code expects to be returned 0 and not 1 if the enemy is not a boss return 0; } @@ -2054,7 +2041,7 @@ export class BattleScene extends SceneBase { } else { this.luckText.setTint(0xffef5c, 0x47ff69, 0x6b6bff, 0xff6969); } - this.luckLabelText.setX(this.game.canvas.width / 6 - 2 - (this.luckText.displayWidth + 2)); + this.luckLabelText.setX(this.scaledCanvas.width - 2 - (this.luckText.displayWidth + 2)); this.tweens.add({ targets: labels, duration: duration, @@ -2088,7 +2075,7 @@ export class BattleScene extends SceneBase { const enemyModifierCount = this.enemyModifiers.filter(m => m.isIconVisible()).length; const biomeWaveTextHeight = this.biomeWaveText.getBottomLeft().y - this.biomeWaveText.getTopLeft().y; this.biomeWaveText.setY( - -(this.game.canvas.height / 6) + + -this.scaledCanvas.height + (enemyModifierCount ? (enemyModifierCount <= 12 ? 15 : 24) : 0) + biomeWaveTextHeight / 2, ); @@ -2100,7 +2087,7 @@ export class BattleScene extends SceneBase { const offsetY = (this.scoreText.visible ? this.scoreText : this.moneyText).y + 15; this.partyExpBar.setY(offsetY); this.candyBar.setY(offsetY + 15); - this.ui?.achvBar.setY(this.game.canvas.height / 6 + offsetY); + this.ui?.achvBar.setY(this.scaledCanvas.height + offsetY); } /** @@ -2719,7 +2706,9 @@ export class BattleScene extends SceneBase { } } - this.party.map(p => p.updateInfo(instant)); + this.party.forEach(p => { + p.updateInfo(instant); + }); } else { const args = [this]; if (modifier.shouldApply(...args)) { diff --git a/src/constants.ts b/src/constants.ts index f3b37563d11..17cf08aa7e2 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -94,3 +94,16 @@ export const AVERAGE_ENCOUNTERS_PER_RUN_TARGET = 12; * So anti-variance adds -15/256 to the spawn weight check for ME spawn. */ export const ANTI_VARIANCE_WEIGHT_MODIFIER = 15; + +/** + * The chance (out of 1) that a different title logo will show when the title screen is drawn. + * Inverted during April Fools (such that this becomes the chance for the _normal_ title logo is displayed). + * Default: `10000` (0.01%) + */ +export const FAKE_TITLE_LOGO_CHANCE = 10000; + +/** + * The ceiling on friendship amount that can be reached through the use of rare candies. + * Using rare candies will never increase friendship beyond this value. + */ +export const RARE_CANDY_FRIENDSHIP_CAP = 200; diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index 2f57df4a551..03670835dbd 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -74,6 +74,7 @@ import { randSeedItem, toDmgValue, } from "#utils/common"; +import { toCamelCase } from "#utils/strings"; import i18next from "i18next"; export class Ability implements Localizable { @@ -109,13 +110,9 @@ export class Ability implements Localizable { } localize(): void { - const i18nKey = AbilityId[this.id] - .split("_") - .filter(f => f) - .map((f, i) => (i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase())) - .join("") as string; + const i18nKey = toCamelCase(AbilityId[this.id]); - this.name = this.id ? `${i18next.t(`ability:${i18nKey}.name`) as string}${this.nameAppend}` : ""; + this.name = this.id ? `${i18next.t(`ability:${i18nKey}.name`)}${this.nameAppend}` : ""; this.description = this.id ? (i18next.t(`ability:${i18nKey}.description`) as string) : ""; } @@ -1284,7 +1281,7 @@ export class PostDefendContactApplyTagChanceAbAttr extends PostDefendAbAttr { /** * Set stat stages when the user gets hit by a critical hit * - * @privateremarks + * @privateRemarks * It is the responsibility of the caller to ensure that this ability attribute is only applied * when the user has been hit by a critical hit; such an event is not checked here. * @@ -1670,6 +1667,7 @@ export class MoveTypeChangeAbAttr extends PreAttackAbAttr { constructor( private newType: PokemonType, private powerMultiplier: number, + // TODO: all moves with this attr solely check the move being used... private condition?: PokemonAttackCondition, ) { super(false); @@ -2043,7 +2041,7 @@ export class AllyStatMultiplierAbAttr extends AbAttr { /** * @param stat - The stat being modified - * @param multipler - The multiplier to apply to the stat + * @param multiplier - The multiplier to apply to the stat * @param ignorable - Whether the multiplier can be ignored by mold breaker-like moves and abilities */ constructor(stat: BattleStat, multiplier: number, ignorable = true) { @@ -5491,7 +5489,7 @@ export class PostFaintContactDamageAbAttr extends PostFaintAbAttr { * Attribute used for abilities that damage opponents causing the user to faint * equal to the amount of damage the last attack inflicted. * - * Used for {@linkcode Abilities.INNARDS_OUT}. + * Used for {@linkcode AbilityId.INNARDS_OUT | Innards Out}. * @sealed */ export class PostFaintHPDamageAbAttr extends PostFaintAbAttr { @@ -6444,23 +6442,23 @@ export class PostDamageForceSwitchAbAttr extends PostDamageAbAttr { public override canApply({ pokemon, source, damage }: PostDamageAbAttrParams): boolean { const moveHistory = pokemon.getMoveHistory(); // Will not activate when the Pokémon's HP is lowered by cutting its own HP - const fordbiddenAttackingMoves = [MoveId.BELLY_DRUM, MoveId.SUBSTITUTE, MoveId.CURSE, MoveId.PAIN_SPLIT]; + const forbiddenAttackingMoves = [MoveId.BELLY_DRUM, MoveId.SUBSTITUTE, MoveId.CURSE, MoveId.PAIN_SPLIT]; if (moveHistory.length > 0) { const lastMoveUsed = moveHistory[moveHistory.length - 1]; - if (fordbiddenAttackingMoves.includes(lastMoveUsed.move)) { + if (forbiddenAttackingMoves.includes(lastMoveUsed.move)) { return false; } } // Dragon Tail and Circle Throw switch out Pokémon before the Ability activates. - const fordbiddenDefendingMoves = [MoveId.DRAGON_TAIL, MoveId.CIRCLE_THROW]; + const forbiddenDefendingMoves = [MoveId.DRAGON_TAIL, MoveId.CIRCLE_THROW]; if (source) { const enemyMoveHistory = source.getMoveHistory(); if (enemyMoveHistory.length > 0) { const enemyLastMoveUsed = enemyMoveHistory[enemyMoveHistory.length - 1]; // Will not activate if the Pokémon's HP falls below half while it is in the air during Sky Drop. if ( - fordbiddenDefendingMoves.includes(enemyLastMoveUsed.move) || + forbiddenDefendingMoves.includes(enemyLastMoveUsed.move) || (enemyLastMoveUsed.move === MoveId.SKY_DROP && enemyLastMoveUsed.result === MoveResult.OTHER) ) { return false; @@ -7307,7 +7305,7 @@ export function initAbilities() { .attr(HealFromBerryUseAbAttr, 1 / 3), new Ability(AbilityId.PROTEAN, 6) .attr(PokemonTypeChangeAbAttr) - // .condition((p) => !p.summonData.abilitiesApplied.includes(Abilities.PROTEAN)) //Gen 9 Implementation + // .condition((p) => !p.summonData.abilitiesApplied.includes(AbilityId.PROTEAN)) //Gen 9 Implementation // TODO: needs testing on interaction with weather blockage .edgeCase(), new Ability(AbilityId.FUR_COAT, 6) @@ -7566,7 +7564,7 @@ export function initAbilities() { .attr(PostSummonStatStageChangeAbAttr, [ Stat.DEF ], 1, true), new Ability(AbilityId.LIBERO, 8) .attr(PokemonTypeChangeAbAttr) - //.condition((p) => !p.summonData.abilitiesApplied.includes(Abilities.LIBERO)), //Gen 9 Implementation + //.condition((p) => !p.summonData.abilitiesApplied.includes(AbilityId.LIBERO)), //Gen 9 Implementation // TODO: needs testing on interaction with weather blockage .edgeCase(), new Ability(AbilityId.BALL_FETCH, 8) diff --git a/src/data/balance/biomes.ts b/src/data/balance/biomes.ts index 1298e80c362..d8297636393 100644 --- a/src/data/balance/biomes.ts +++ b/src/data/balance/biomes.ts @@ -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/egg-moves.ts b/src/data/balance/egg-moves.ts index 3475fe4fdea..e936afcdc08 100644 --- a/src/data/balance/egg-moves.ts +++ b/src/data/balance/egg-moves.ts @@ -15,7 +15,7 @@ export const speciesEggMoves = { [SpeciesId.SPEAROW]: [ MoveId.FLOATY_FALL, MoveId.EXTREME_SPEED, MoveId.KNOCK_OFF, MoveId.TRIPLE_ARROWS ], [SpeciesId.EKANS]: [ MoveId.NOXIOUS_TORQUE, MoveId.DRAGON_DANCE, MoveId.SLACK_OFF, MoveId.SHED_TAIL ], [SpeciesId.SANDSHREW]: [ MoveId.HIGH_HORSEPOWER, MoveId.DIRE_CLAW, MoveId.SHORE_UP, MoveId.MIGHTY_CLEAVE ], - [SpeciesId.NIDORAN_F]: [ MoveId.CALM_MIND, MoveId.MOONLIGHT, MoveId.MALIGNANT_CHAIN, MoveId.SANDSEAR_STORM ], + [SpeciesId.NIDORAN_F]: [ MoveId.BANEFUL_BUNKER, MoveId.MOONLIGHT, MoveId.BARB_BARRAGE, MoveId.THOUSAND_WAVES ], [SpeciesId.NIDORAN_M]: [ MoveId.DRAGON_DANCE, MoveId.MOUNTAIN_GALE, MoveId.NOXIOUS_TORQUE, MoveId.PRECIPICE_BLADES ], [SpeciesId.VULPIX]: [ MoveId.MOONBLAST, MoveId.INFERNAL_PARADE, MoveId.MORNING_SUN, MoveId.TAIL_GLOW ], [SpeciesId.ZUBAT]: [ MoveId.FLOATY_FALL, MoveId.DIRE_CLAW, MoveId.SWORDS_DANCE, MoveId.COLLISION_COURSE ], @@ -293,7 +293,7 @@ export const speciesEggMoves = { [SpeciesId.ARCHEN]: [ MoveId.ROOST, MoveId.EARTHQUAKE, MoveId.FLOATY_FALL, MoveId.MIGHTY_CLEAVE ], [SpeciesId.TRUBBISH]: [ MoveId.COIL, MoveId.RECOVER, MoveId.DIRE_CLAW, MoveId.GIGATON_HAMMER ], [SpeciesId.ZORUA]: [ MoveId.MALIGNANT_CHAIN, MoveId.MOONBLAST, MoveId.SECRET_SWORD, MoveId.FIERY_WRATH ], - [SpeciesId.MINCCINO]: [ MoveId.ICICLE_SPEAR, MoveId.TIDY_UP, MoveId.KNOCK_OFF, MoveId.POPULATION_BOMB ], + [SpeciesId.MINCCINO]: [ MoveId.ICICLE_SPEAR, MoveId.TIDY_UP, MoveId.LOW_KICK, MoveId.POPULATION_BOMB ], [SpeciesId.GOTHITA]: [ MoveId.RECOVER, MoveId.MOONBLAST, MoveId.AURA_SPHERE, MoveId.LUMINA_CRASH ], [SpeciesId.SOLOSIS]: [ MoveId.MIST_BALL, MoveId.SPEED_SWAP, MoveId.FLAMETHROWER, MoveId.LIGHT_OF_RUIN ], [SpeciesId.DUCKLETT]: [ MoveId.SPLISHY_SPLASH, MoveId.SANDSEAR_STORM, MoveId.WILDBOLT_STORM, MoveId.QUIVER_DANCE ], @@ -310,7 +310,7 @@ export const speciesEggMoves = { [SpeciesId.TYNAMO]: [ MoveId.SCALD, MoveId.STRENGTH_SAP, MoveId.FIRE_LASH, MoveId.AURA_WHEEL ], [SpeciesId.ELGYEM]: [ MoveId.THUNDERCLAP, MoveId.BADDY_BAD, MoveId.AURA_SPHERE, MoveId.PHOTON_GEYSER ], [SpeciesId.LITWICK]: [ MoveId.GIGA_DRAIN, MoveId.EARTH_POWER, MoveId.MOONBLAST, MoveId.TORCH_SONG ], - [SpeciesId.AXEW]: [ MoveId.STONE_AXE, MoveId.DIRE_CLAW, MoveId.BITTER_BLADE, MoveId.GLAIVE_RUSH ], + [SpeciesId.AXEW]: [ MoveId.STONE_AXE, MoveId.DIRE_CLAW, MoveId.RAGING_FURY, MoveId.BITTER_BLADE ], [SpeciesId.CUBCHOO]: [ MoveId.MOUNTAIN_GALE, MoveId.AQUA_STEP, MoveId.ICE_SHARD, MoveId.COLLISION_COURSE ], [SpeciesId.CRYOGONAL]: [ MoveId.FREEZING_GLARE, MoveId.AURORA_VEIL, MoveId.NASTY_PLOT, MoveId.ORIGIN_PULSE ], [SpeciesId.SHELMET]: [ MoveId.POWER_GEM, MoveId.NASTY_PLOT, MoveId.EARTH_POWER, MoveId.STEAM_ERUPTION ], @@ -448,7 +448,7 @@ export const speciesEggMoves = { [SpeciesId.ROOKIDEE]: [ MoveId.ROOST, MoveId.BODY_PRESS, MoveId.KINGS_SHIELD, MoveId.BEHEMOTH_BASH ], [SpeciesId.BLIPBUG]: [ MoveId.HEAL_ORDER, MoveId.LUSTER_PURGE, MoveId.SLEEP_POWDER, MoveId.TAIL_GLOW ], [SpeciesId.NICKIT]: [ MoveId.BADDY_BAD, MoveId.MYSTICAL_FIRE, MoveId.SPARKLY_SWIRL, MoveId.MAKE_IT_RAIN ], - [SpeciesId.GOSSIFLEUR]: [ MoveId.PARTING_SHOT, MoveId.STRENGTH_SAP, MoveId.SAPPY_SEED, MoveId.SEED_FLARE ], + [SpeciesId.GOSSIFLEUR]: [ MoveId.BATON_PASS, MoveId.TAILWIND, MoveId.SAPPY_SEED, MoveId.SPORE ], [SpeciesId.WOOLOO]: [ MoveId.NUZZLE, MoveId.MILK_DRINK, MoveId.BODY_PRESS, MoveId.MULTI_ATTACK ], [SpeciesId.CHEWTLE]: [ MoveId.ICE_FANG, MoveId.PSYCHIC_FANGS, MoveId.SHELL_SMASH, MoveId.MIGHTY_CLEAVE ], [SpeciesId.YAMPER]: [ MoveId.ICE_FANG, MoveId.SWORDS_DANCE, MoveId.THUNDER_FANG, MoveId.BOLT_STRIKE ], @@ -514,7 +514,7 @@ export const speciesEggMoves = { [SpeciesId.TAROUNTULA]: [ MoveId.STONE_AXE, MoveId.LEECH_LIFE, MoveId.FAKE_OUT, MoveId.SPORE ], [SpeciesId.NYMBLE]: [ MoveId.KNOCK_OFF, MoveId.FELL_STINGER, MoveId.ATTACK_ORDER, MoveId.WICKED_BLOW ], [SpeciesId.PAWMI]: [ MoveId.DRAIN_PUNCH, MoveId.METEOR_MASH, MoveId.JET_PUNCH, MoveId.PLASMA_FISTS ], - [SpeciesId.TANDEMAUS]: [ MoveId.BATON_PASS, MoveId.COVET, MoveId.SIZZLY_SLIDE, MoveId.REVIVAL_BLESSING ], + [SpeciesId.TANDEMAUS]: [ MoveId.BATON_PASS, MoveId.FAKE_OUT, MoveId.POWER_UP_PUNCH, MoveId.REVIVAL_BLESSING ], [SpeciesId.FIDOUGH]: [ MoveId.SOFT_BOILED, MoveId.HIGH_HORSEPOWER, MoveId.SIZZLY_SLIDE, MoveId.TIDY_UP ], [SpeciesId.SMOLIV]: [ MoveId.STRENGTH_SAP, MoveId.EARTH_POWER, MoveId.CALM_MIND, MoveId.BOOMBURST ], [SpeciesId.SQUAWKABILLY]: [ MoveId.PARTING_SHOT, MoveId.EARTHQUAKE, MoveId.FLARE_BLITZ, MoveId.EXTREME_SPEED ], diff --git a/src/data/balance/passives.ts b/src/data/balance/passives.ts index 0a76b3036b9..64fa9b87138 100644 --- a/src/data/balance/passives.ts +++ b/src/data/balance/passives.ts @@ -36,9 +36,9 @@ export const starterPassiveAbilities: StarterPassiveAbilities = { [SpeciesId.ARBOK]: { 0: AbilityId.REGENERATOR }, [SpeciesId.SANDSHREW]: { 0: AbilityId.TOUGH_CLAWS }, [SpeciesId.SANDSLASH]: { 0: AbilityId.TOUGH_CLAWS }, - [SpeciesId.NIDORAN_F]: { 0: AbilityId.FLARE_BOOST }, - [SpeciesId.NIDORINA]: { 0: AbilityId.FLARE_BOOST }, - [SpeciesId.NIDOQUEEN]: { 0: AbilityId.FLARE_BOOST }, + [SpeciesId.NIDORAN_F]: { 0: AbilityId.TOXIC_DEBRIS }, + [SpeciesId.NIDORINA]: { 0: AbilityId.TOXIC_DEBRIS }, + [SpeciesId.NIDOQUEEN]: { 0: AbilityId.TOXIC_DEBRIS }, [SpeciesId.NIDORAN_M]: { 0: AbilityId.GUTS }, [SpeciesId.NIDORINO]: { 0: AbilityId.GUTS }, [SpeciesId.NIDOKING]: { 0: AbilityId.GUTS }, @@ -220,8 +220,8 @@ export const starterPassiveAbilities: StarterPassiveAbilities = { [SpeciesId.YANMEGA]: { 0: AbilityId.SHEER_FORCE }, [SpeciesId.WOOPER]: { 0: AbilityId.WATER_VEIL }, [SpeciesId.QUAGSIRE]: { 0: AbilityId.COMATOSE }, - [SpeciesId.MURKROW]: { 0: AbilityId.DARK_AURA }, - [SpeciesId.HONCHKROW]: { 0: AbilityId.DARK_AURA }, + [SpeciesId.MURKROW]: { 0: AbilityId.UNNERVE }, + [SpeciesId.HONCHKROW]: { 0: AbilityId.INTIMIDATE }, [SpeciesId.MISDREAVUS]: { 0: AbilityId.BEADS_OF_RUIN }, [SpeciesId.MISMAGIUS]: { 0: AbilityId.BEADS_OF_RUIN }, [SpeciesId.UNOWN]: { 0: AbilityId.ADAPTABILITY, 1: AbilityId.BEAST_BOOST, 2: AbilityId.CONTRARY, 3: AbilityId.DAZZLING, 4: AbilityId.EMERGENCY_EXIT, 5: AbilityId.FRIEND_GUARD, 6: AbilityId.GOOD_AS_GOLD, 7: AbilityId.HONEY_GATHER, 8: AbilityId.IMPOSTER, 9: AbilityId.JUSTIFIED, 10: AbilityId.KLUTZ, 11: AbilityId.LIBERO, 12: AbilityId.MOODY, 13: AbilityId.NEUTRALIZING_GAS, 14: AbilityId.OPPORTUNIST, 15: AbilityId.PICKUP, 16: AbilityId.QUICK_DRAW, 17: AbilityId.RUN_AWAY, 18: AbilityId.SIMPLE, 19: AbilityId.TRACE, 20: AbilityId.UNNERVE, 21: AbilityId.VICTORY_STAR, 22: AbilityId.WANDERING_SPIRIT, 23: AbilityId.FAIRY_AURA, 24: AbilityId.DARK_AURA, 25: AbilityId.AURA_BREAK, 26: AbilityId.PURE_POWER, 27: AbilityId.UNAWARE }, @@ -391,7 +391,7 @@ export const starterPassiveAbilities: StarterPassiveAbilities = { [SpeciesId.BANETTE]: { 0: AbilityId.SHADOW_SHIELD, 1: AbilityId.SHADOW_SHIELD }, [SpeciesId.DUSKULL]: { 0: AbilityId.UNNERVE }, [SpeciesId.DUSCLOPS]: { 0: AbilityId.UNNERVE }, - [SpeciesId.DUSKNOIR]: { 0: AbilityId.UNNERVE }, + [SpeciesId.DUSKNOIR]: { 0: AbilityId.LEVITATE }, [SpeciesId.TROPIUS]: { 0: AbilityId.RIPEN }, [SpeciesId.ABSOL]: { 0: AbilityId.SHARPNESS, 1: AbilityId.SHARPNESS }, [SpeciesId.WYNAUT]: { 0: AbilityId.STURDY }, @@ -640,9 +640,9 @@ export const starterPassiveAbilities: StarterPassiveAbilities = { [SpeciesId.LITWICK]: { 0: AbilityId.SHADOW_TAG }, [SpeciesId.LAMPENT]: { 0: AbilityId.SHADOW_TAG }, [SpeciesId.CHANDELURE]: { 0: AbilityId.SHADOW_TAG }, - [SpeciesId.AXEW]: { 0: AbilityId.DRAGONS_MAW }, - [SpeciesId.FRAXURE]: { 0: AbilityId.DRAGONS_MAW }, - [SpeciesId.HAXORUS]: { 0: AbilityId.DRAGONS_MAW }, + [SpeciesId.AXEW]: { 0: AbilityId.OWN_TEMPO }, + [SpeciesId.FRAXURE]: { 0: AbilityId.OWN_TEMPO }, + [SpeciesId.HAXORUS]: { 0: AbilityId.OWN_TEMPO }, [SpeciesId.CUBCHOO]: { 0: AbilityId.FUR_COAT }, [SpeciesId.BEARTIC]: { 0: AbilityId.FUR_COAT }, [SpeciesId.CRYOGONAL]: { 0: AbilityId.SNOW_WARNING }, @@ -827,7 +827,7 @@ export const starterPassiveAbilities: StarterPassiveAbilities = { [SpeciesId.TAPU_LELE]: { 0: AbilityId.BERSERK }, [SpeciesId.TAPU_BULU]: { 0: AbilityId.FLOWER_VEIL }, [SpeciesId.TAPU_FINI]: { 0: AbilityId.FAIRY_AURA }, - [SpeciesId.COSMOG]: { 0: AbilityId.PICKUP }, + [SpeciesId.COSMOG]: { 0: AbilityId.POWER_SPOT }, [SpeciesId.COSMOEM]: { 0: AbilityId.POWER_SPOT }, [SpeciesId.SOLGALEO]: { 0: AbilityId.BEAST_BOOST }, [SpeciesId.LUNALA]: { 0: AbilityId.BEAST_BOOST }, @@ -1044,7 +1044,7 @@ export const starterPassiveAbilities: StarterPassiveAbilities = { [SpeciesId.FINIZEN]: { 0: AbilityId.FRIEND_GUARD }, [SpeciesId.PALAFIN]: { 0: AbilityId.EMERGENCY_EXIT, 1: AbilityId.IRON_FIST }, [SpeciesId.VAROOM]: { 0: AbilityId.LEVITATE }, - [SpeciesId.REVAVROOM]: { 0: AbilityId.LEVITATE, 1: AbilityId.DARK_AURA, 2: AbilityId.FLASH_FIRE, 3: AbilityId.MERCILESS, 4: AbilityId.FILTER, 5: AbilityId.SCRAPPY }, + [SpeciesId.REVAVROOM]: { 0: AbilityId.LEVITATE, 1: AbilityId.INTIMIDATE, 2: AbilityId.SPEED_BOOST, 3: AbilityId.TOXIC_DEBRIS, 4: AbilityId.MISTY_SURGE, 5: AbilityId.STAMINA }, [SpeciesId.CYCLIZAR]: { 0: AbilityId.PROTEAN }, [SpeciesId.ORTHWORM]: { 0: AbilityId.REGENERATOR }, [SpeciesId.GLIMMET]: { 0: AbilityId.STURDY }, diff --git a/src/data/balance/pokemon-evolutions.ts b/src/data/balance/pokemon-evolutions.ts index ab535682e86..5d3537f4255 100644 --- a/src/data/balance/pokemon-evolutions.ts +++ b/src/data/balance/pokemon-evolutions.ts @@ -1866,17 +1866,16 @@ interface PokemonPrevolutions { export const pokemonPrevolutions: PokemonPrevolutions = {}; export function initPokemonPrevolutions(): void { - const megaFormKeys = [ SpeciesFormKey.MEGA, "", SpeciesFormKey.MEGA_X, "", SpeciesFormKey.MEGA_Y ].map(sfk => sfk as string); - const prevolutionKeys = Object.keys(pokemonEvolutions); - prevolutionKeys.forEach(pk => { - const evolutions = pokemonEvolutions[pk]; + // TODO: Why do we have empty strings in our array? + const megaFormKeys = [ SpeciesFormKey.MEGA, "", SpeciesFormKey.MEGA_X, "", SpeciesFormKey.MEGA_Y ]; + for (const [pk, evolutions] of Object.entries(pokemonEvolutions)) { for (const ev of evolutions) { if (ev.evoFormKey && megaFormKeys.indexOf(ev.evoFormKey) > -1) { continue; } pokemonPrevolutions[ev.speciesId] = Number.parseInt(pk) as SpeciesId; } - }); + } } diff --git a/src/data/balance/pokemon-species.ts b/src/data/balance/pokemon-species.ts index 5e9d352f437..13269308958 100644 --- a/src/data/balance/pokemon-species.ts +++ b/src/data/balance/pokemon-species.ts @@ -1618,11 +1618,11 @@ export function initSpecies() { 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 PokemonForm("Segin Starmobile", "segin-starmobile", PokemonType.STEEL, PokemonType.DARK, 1.8, 240, AbilityId.OVERCOAT, AbilityId.NONE, AbilityId.OVERCOAT, 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.OVERCOAT, AbilityId.NONE, AbilityId.OVERCOAT, 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.OVERCOAT, AbilityId.NONE, AbilityId.OVERCOAT, 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.OVERCOAT, AbilityId.NONE, AbilityId.OVERCOAT, 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.OVERCOAT, AbilityId.NONE, AbilityId.OVERCOAT, 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), diff --git a/src/data/balance/signature-species.ts b/src/data/balance/signature-species.ts index fba91f6fe3d..557bcdfed16 100644 --- a/src/data/balance/signature-species.ts +++ b/src/data/balance/signature-species.ts @@ -30,7 +30,7 @@ export const signatureSpecies: SignatureSpecies = new Proxy({ FALKNER: [SpeciesId.PIDGEY, SpeciesId.HOOTHOOT, SpeciesId.NATU, SpeciesId.MURKROW], BUGSY: [SpeciesId.SCYTHER, SpeciesId.SHUCKLE, SpeciesId.YANMA, [SpeciesId.PINSIR, SpeciesId.HERACROSS]], WHITNEY: [SpeciesId.MILTANK, SpeciesId.AIPOM, SpeciesId.IGGLYBUFF, [SpeciesId.GIRAFARIG, SpeciesId.STANTLER]], - MORTY: [SpeciesId.GASTLY, SpeciesId.MISDREAVUS, SpeciesId.DUSKULL, SpeciesId.SABLEYE], + MORTY: [SpeciesId.GASTLY, SpeciesId.MISDREAVUS, SpeciesId.DUSKULL, SpeciesId.HISUI_TYPHLOSION], CHUCK: [SpeciesId.POLIWRATH, SpeciesId.MANKEY, SpeciesId.TYROGUE, SpeciesId.MACHOP], JASMINE: [SpeciesId.STEELIX, SpeciesId.MAGNEMITE, SpeciesId.PINECO, SpeciesId.SKARMORY], PRYCE: [SpeciesId.SWINUB, SpeciesId.SEEL, SpeciesId.SHELLDER, SpeciesId.SNEASEL], diff --git a/src/data/balance/starters.ts b/src/data/balance/starters.ts index 8b91c12ae2d..99d5ad62e47 100644 --- a/src/data/balance/starters.ts +++ b/src/data/balance/starters.ts @@ -566,7 +566,7 @@ export const speciesStarterCosts = { [SpeciesId.FLITTLE]: 3, [SpeciesId.TINKATINK]: 4, [SpeciesId.WIGLETT]: 2, - [SpeciesId.BOMBIRDIER]: 3, + [SpeciesId.BOMBIRDIER]: 4, [SpeciesId.FINIZEN]: 3, [SpeciesId.VAROOM]: 4, [SpeciesId.CYCLIZAR]: 4, diff --git a/src/data/balance/tms.ts b/src/data/balance/tms.ts index e194dc4040c..bd7cf401ad1 100644 --- a/src/data/balance/tms.ts +++ b/src/data/balance/tms.ts @@ -45736,6 +45736,285 @@ export const tmSpecies: TmSpecies = { SpeciesId.HISUI_ARCANINE, SpeciesId.HISUI_AVALUGG, ], + [MoveId.SHOCK_WAVE]: [ + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.LICKITUNG, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.TANGELA, + SpeciesId.KANGASKHAN, + SpeciesId.MR_MIME, + SpeciesId.ELECTABUZZ, + SpeciesId.TAUROS, + SpeciesId.LAPRAS, + SpeciesId.JOLTEON, + SpeciesId.PORYGON, + SpeciesId.SNORLAX, + SpeciesId.ZAPDOS, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.AIPOM, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.DUNSPARCE, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.QWILFISH, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.ELEKID, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.NOSEPASS, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.ZANGOOSE, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.PACHIRISU, + SpeciesId.AMBIPOM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MISMAGIUS, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.CHINGLING, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.SPIRITOMB, + SpeciesId.MUNCHLAX, + SpeciesId.MAGNEZONE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.ELECTIVIRE, + SpeciesId.TOGEKISS, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.DARKRAI, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.BLITZLE, + SpeciesId.ZEBSTRIKA, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.SIGILYPH, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.EMOLGA, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.STUNFISK, + SpeciesId.DRUDDIGON, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.THUNDURUS, + SpeciesId.ZEKROM, + SpeciesId.MELOETTA, + SpeciesId.GENESECT, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.DEDENNE, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.ZYGARDE, + SpeciesId.HOOPA, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.PASSIMIAN, + SpeciesId.TURTONATOR, + SpeciesId.TOGEDEMARU, + SpeciesId.DRAMPA, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_KOKO, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.PHEROMOSA, + SpeciesId.XURKITREE, + SpeciesId.CELESTEELA, + SpeciesId.GUZZLORD, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.NAGANADEL, + SpeciesId.ZERAORA, + SpeciesId.TOXTRICITY, + SpeciesId.MR_RIME, + SpeciesId.REGIELEKI, + SpeciesId.WYRDEER, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.MIRAIDON, + SpeciesId.RAGING_BOLT, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_MR_MIME, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, + ], [MoveId.WATER_PULSE]: [ SpeciesId.SQUIRTLE, SpeciesId.WARTORTLE, @@ -68747,6 +69026,7 @@ export const tmPoolTiers: TmPoolTiers = { [MoveId.LEAF_BLADE]: ModifierTier.ULTRA, [MoveId.DRAGON_DANCE]: ModifierTier.GREAT, [MoveId.ROCK_BLAST]: ModifierTier.GREAT, + [MoveId.SHOCK_WAVE]: ModifierTier.GREAT, [MoveId.WATER_PULSE]: ModifierTier.GREAT, [MoveId.ROOST]: ModifierTier.GREAT, [MoveId.GRAVITY]: ModifierTier.COMMON, diff --git a/src/data/battle-anims.ts b/src/data/battle-anims.ts index 55a3cc4e916..aa4951f3263 100644 --- a/src/data/battle-anims.ts +++ b/src/data/battle-anims.ts @@ -404,22 +404,18 @@ export const chargeAnims = new Map(); export const encounterAnims = new Map(); -export function initCommonAnims(): Promise { - return new Promise(resolve => { - const commonAnimNames = getEnumKeys(CommonAnim); - const commonAnimIds = getEnumValues(CommonAnim); - const commonAnimFetches: Promise>[] = []; - for (let ca = 0; ca < commonAnimIds.length; ca++) { - const commonAnimId = commonAnimIds[ca]; - commonAnimFetches.push( - globalScene - .cachedFetch(`./battle-anims/common-${toKebabCase(commonAnimNames[ca])}.json`) - .then(response => response.json()) - .then(cas => commonAnims.set(commonAnimId, new AnimConfig(cas))), - ); - } - Promise.allSettled(commonAnimFetches).then(() => resolve()); - }); +export async function initCommonAnims(): Promise { + const commonAnimFetches: Promise>[] = []; + for (const commonAnimName of getEnumKeys(CommonAnim)) { + const commonAnimId = CommonAnim[commonAnimName]; + commonAnimFetches.push( + globalScene + .cachedFetch(`./battle-anims/common-${toKebabCase(commonAnimName)}.json`) + .then(response => response.json()) + .then(cas => commonAnims.set(commonAnimId, new AnimConfig(cas))), + ); + } + await Promise.allSettled(commonAnimFetches); } export function initMoveAnim(move: MoveId): Promise { @@ -1396,279 +1392,3 @@ export class EncounterBattleAnim extends BattleAnim { return this.oppAnim; } } - -export async function populateAnims() { - const commonAnimNames = getEnumKeys(CommonAnim).map(k => k.toLowerCase()); - const commonAnimMatchNames = commonAnimNames.map(k => k.replace(/_/g, "")); - const commonAnimIds = getEnumValues(CommonAnim); - const chargeAnimNames = getEnumKeys(ChargeAnim).map(k => k.toLowerCase()); - const chargeAnimMatchNames = chargeAnimNames.map(k => k.replace(/_/g, " ")); - const chargeAnimIds = getEnumValues(ChargeAnim); - const commonNamePattern = /name: (?:Common:)?(Opp )?(.*)/; - const moveNameToId = {}; - // Exclude MoveId.NONE; - for (const move of getEnumValues(MoveId).slice(1)) { - // KARATE_CHOP => KARATECHOP - const moveName = MoveId[move].toUpperCase().replace(/_/g, ""); - moveNameToId[moveName] = move; - } - - const seNames: string[] = []; //(await fs.readdir('./public/audio/se/battle_anims/')).map(se => se.toString()); - - const animsData: any[] = []; //battleAnimRawData.split('!ruby/array:PBAnimation').slice(1); // TODO: add a proper type - for (let a = 0; a < animsData.length; a++) { - const fields = animsData[a].split("@").slice(1); - - const nameField = fields.find(f => f.startsWith("name: ")); - - let isOppMove: boolean | undefined; - let commonAnimId: CommonAnim | undefined; - let chargeAnimId: ChargeAnim | undefined; - if (!nameField.startsWith("name: Move:") && !(isOppMove = nameField.startsWith("name: OppMove:"))) { - const nameMatch = commonNamePattern.exec(nameField)!; // TODO: is this bang correct? - const name = nameMatch[2].toLowerCase(); - if (commonAnimMatchNames.indexOf(name) > -1) { - commonAnimId = commonAnimIds[commonAnimMatchNames.indexOf(name)]; - } else if (chargeAnimMatchNames.indexOf(name) > -1) { - isOppMove = nameField.startsWith("name: Opp "); - chargeAnimId = chargeAnimIds[chargeAnimMatchNames.indexOf(name)]; - } - } - const nameIndex = nameField.indexOf(":", 5) + 1; - const animName = nameField.slice(nameIndex, nameField.indexOf("\n", nameIndex)); - if (!moveNameToId.hasOwnProperty(animName) && !commonAnimId && !chargeAnimId) { - continue; - } - const anim = commonAnimId || chargeAnimId ? new AnimConfig() : new AnimConfig(); - if (anim instanceof AnimConfig) { - (anim as AnimConfig).id = moveNameToId[animName]; - } - if (commonAnimId) { - commonAnims.set(commonAnimId, anim); - } else if (chargeAnimId) { - chargeAnims.set(chargeAnimId, !isOppMove ? anim : [chargeAnims.get(chargeAnimId) as AnimConfig, anim]); - } else { - moveAnims.set( - moveNameToId[animName], - !isOppMove ? (anim as AnimConfig) : [moveAnims.get(moveNameToId[animName]) as AnimConfig, anim as AnimConfig], - ); - } - for (let f = 0; f < fields.length; f++) { - const field = fields[f]; - const fieldName = field.slice(0, field.indexOf(":")); - const fieldData = field.slice(fieldName.length + 1, field.lastIndexOf("\n")).trim(); - switch (fieldName) { - case "array": { - const framesData = fieldData.split(" - - - ").slice(1); - for (let fd = 0; fd < framesData.length; fd++) { - anim.frames.push([]); - const frameData = framesData[fd]; - const focusFramesData = frameData.split(" - - "); - for (let tf = 0; tf < focusFramesData.length; tf++) { - const values = focusFramesData[tf].replace(/ {6}- /g, "").split("\n"); - const targetFrame = new AnimFrame( - Number.parseFloat(values[0]), - Number.parseFloat(values[1]), - Number.parseFloat(values[2]), - Number.parseFloat(values[11]), - Number.parseFloat(values[3]), - Number.parseInt(values[4]) === 1, - Number.parseInt(values[6]) === 1, - Number.parseInt(values[5]), - Number.parseInt(values[7]), - Number.parseInt(values[8]), - Number.parseInt(values[12]), - Number.parseInt(values[13]), - Number.parseInt(values[14]), - Number.parseInt(values[15]), - Number.parseInt(values[16]), - Number.parseInt(values[17]), - Number.parseInt(values[18]), - Number.parseInt(values[19]), - Number.parseInt(values[21]), - Number.parseInt(values[22]), - Number.parseInt(values[23]), - Number.parseInt(values[24]), - Number.parseInt(values[20]) === 1, - Number.parseInt(values[25]), - Number.parseInt(values[26]) as AnimFocus, - ); - anim.frames[fd].push(targetFrame); - } - } - break; - } - case "graphic": { - const graphic = fieldData !== "''" ? fieldData : ""; - anim.graphic = graphic.indexOf(".") > -1 ? graphic.slice(0, fieldData.indexOf(".")) : graphic; - break; - } - case "timing": { - const timingEntries = fieldData.split("- !ruby/object:PBAnimTiming ").slice(1); - for (let t = 0; t < timingEntries.length; t++) { - const timingData = timingEntries[t] - .replace(/\n/g, " ") - .replace(/[ ]{2,}/g, " ") - .replace(/[a-z]+: ! '', /gi, "") - .replace(/name: (.*?),/, 'name: "$1",') - .replace( - /flashColor: !ruby\/object:Color { alpha: ([\d.]+), blue: ([\d.]+), green: ([\d.]+), red: ([\d.]+)}/, - "flashRed: $4, flashGreen: $3, flashBlue: $2, flashAlpha: $1", - ); - const frameIndex = Number.parseInt(/frame: (\d+)/.exec(timingData)![1]); // TODO: is the bang correct? - let resourceName = /name: "(.*?)"/.exec(timingData)![1].replace("''", ""); // TODO: is the bang correct? - const timingType = Number.parseInt(/timingType: (\d)/.exec(timingData)![1]); // TODO: is the bang correct? - let timedEvent: AnimTimedEvent | undefined; - switch (timingType) { - case 0: - if (resourceName && resourceName.indexOf(".") === -1) { - let ext: string | undefined; - ["wav", "mp3", "m4a"].every(e => { - if (seNames.indexOf(`${resourceName}.${e}`) > -1) { - ext = e; - return false; - } - return true; - }); - if (!ext) { - ext = ".wav"; - } - resourceName += `.${ext}`; - } - timedEvent = new AnimTimedSoundEvent(frameIndex, resourceName); - break; - case 1: - timedEvent = new AnimTimedAddBgEvent(frameIndex, resourceName.slice(0, resourceName.indexOf("."))); - break; - case 2: - timedEvent = new AnimTimedUpdateBgEvent(frameIndex, resourceName.slice(0, resourceName.indexOf("."))); - break; - } - if (!timedEvent) { - continue; - } - const propPattern = /([a-z]+): (.*?)(?:,|\})/gi; - let propMatch: RegExpExecArray; - while ((propMatch = propPattern.exec(timingData)!)) { - // TODO: is this bang correct? - const prop = propMatch[1]; - let value: any = propMatch[2]; - switch (prop) { - case "bgX": - case "bgY": - value = Number.parseFloat(value); - break; - case "volume": - case "pitch": - case "opacity": - case "colorRed": - case "colorGreen": - case "colorBlue": - case "colorAlpha": - case "duration": - case "flashScope": - case "flashRed": - case "flashGreen": - case "flashBlue": - case "flashAlpha": - case "flashDuration": - value = Number.parseInt(value); - break; - } - if (timedEvent.hasOwnProperty(prop)) { - timedEvent[prop] = value; - } - } - if (!anim.frameTimedEvents.has(frameIndex)) { - anim.frameTimedEvents.set(frameIndex, []); - } - anim.frameTimedEvents.get(frameIndex)!.push(timedEvent); // TODO: is this bang correct? - } - break; - } - case "position": - anim.position = Number.parseInt(fieldData); - break; - case "hue": - anim.hue = Number.parseInt(fieldData); - break; - } - } - } - - // biome-ignore lint/correctness/noUnusedVariables: used in commented code - const animReplacer = (k, v) => { - if (k === "id" && !v) { - return undefined; - } - if (v instanceof Map) { - return Object.fromEntries(v); - } - if (v instanceof AnimTimedEvent) { - v["eventType"] = v.getEventType(); - } - return v; - }; - - const animConfigProps = ["id", "graphic", "frames", "frameTimedEvents", "position", "hue"]; - const animFrameProps = [ - "x", - "y", - "zoomX", - "zoomY", - "angle", - "mirror", - "visible", - "blendType", - "target", - "graphicFrame", - "opacity", - "color", - "tone", - "flash", - "locked", - "priority", - "focus", - ]; - const propSets = [animConfigProps, animFrameProps]; - - // biome-ignore lint/correctness/noUnusedVariables: used in commented code - const animComparator = (a: Element, b: Element) => { - let props: string[]; - for (let p = 0; p < propSets.length; p++) { - props = propSets[p]; - // @ts-expect-error TODO - const ai = props.indexOf(a.key); - if (ai === -1) { - continue; - } - // @ts-expect-error TODO - const bi = props.indexOf(b.key); - - return ai < bi ? -1 : ai > bi ? 1 : 0; - } - - return 0; - }; - - /*for (let ma of moveAnims.keys()) { - const data = moveAnims.get(ma); - (async () => { - await fs.writeFile(`../public/battle-anims/${Moves[ma].toLowerCase().replace(/\_/g, '-')}.json`, stringify(data, { replacer: animReplacer, cmp: animComparator, space: ' ' })); - })(); - } - - for (let ca of chargeAnims.keys()) { - const data = chargeAnims.get(ca); - (async () => { - await fs.writeFile(`../public/battle-anims/${chargeAnimNames[chargeAnimIds.indexOf(ca)].replace(/\_/g, '-')}.json`, stringify(data, { replacer: animReplacer, cmp: animComparator, space: ' ' })); - })(); - } - - for (let cma of commonAnims.keys()) { - const data = commonAnims.get(cma); - (async () => { - await fs.writeFile(`../public/battle-anims/common-${commonAnimNames[commonAnimIds.indexOf(cma)].replace(/\_/g, '-')}.json`, stringify(data, { replacer: animReplacer, cmp: animComparator, space: ' ' })); - })(); - }*/ -} diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 455beec6901..1199ac581a6 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -2115,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); @@ -2128,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), @@ -2614,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); @@ -2668,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; @@ -2678,7 +2678,11 @@ export class StockpilingTag extends SerializableBattlerTag { if (spDefChange) { this.statChangeCounts[Stat.SPDEF]++; } - }; + + // 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, @@ -2718,7 +2722,7 @@ export class StockpilingTag extends SerializableBattlerTag { true, false, true, - this.onStatStagesChanged, + this.onStatStagesChanged.bind(this), ); } } diff --git a/src/data/challenge.ts b/src/data/challenge.ts index 1a1a3774f8f..89435149d2f 100644 --- a/src/data/challenge.ts +++ b/src/data/challenge.ts @@ -1,29 +1,27 @@ import type { FixedBattleConfig } from "#app/battle"; import { getRandomTrainerFunc } from "#app/battle"; import { defaultStarterSpecies } from "#app/constants"; -import { globalScene } from "#app/global-scene"; -import { pokemonEvolutions } from "#balance/pokemon-evolutions"; import { speciesStarterCosts } from "#balance/starters"; -import { pokemonFormChanges } from "#data/pokemon-forms"; import type { PokemonSpecies } 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 { ClassicFixedBossWaves } from "#enums/fixed-boss-waves"; import { ModifierTier } from "#enums/modifier-tier"; -import type { MoveId } from "#enums/move-id"; +import { MoveId } from "#enums/move-id"; import type { MoveSourceType } from "#enums/move-source-type"; import { Nature } from "#enums/nature"; import { PokemonType } from "#enums/pokemon-type"; import { SpeciesId } from "#enums/species-id"; import { TrainerType } from "#enums/trainer-type"; import { TrainerVariant } from "#enums/trainer-variant"; -import type { Pokemon } from "#field/pokemon"; +import type { EnemyPokemon, PlayerPokemon, Pokemon } from "#field/pokemon"; import { Trainer } from "#field/trainer"; +import type { ModifierTypeOption } from "#modifiers/modifier-type"; import { PokemonMove } from "#moves/pokemon-move"; import type { DexAttrProps, GameData } from "#system/game-data"; -import { BooleanHolder, isBetween, type NumberHolder, randSeedItem } from "#utils/common"; +import { RibbonData, type RibbonFlag } from "#system/ribbons/ribbon-data"; +import { type BooleanHolder, isBetween, type NumberHolder, randSeedItem } from "#utils/common"; import { deepCopy } from "#utils/data"; import { getPokemonSpecies, getPokemonSpeciesForm } from "#utils/pokemon-utils"; import { toCamelCase, toSnakeCase } from "#utils/strings"; @@ -45,6 +43,15 @@ export abstract class Challenge { public conditions: ChallengeCondition[]; + /** + * The Ribbon awarded on challenge completion, or 0 if the challenge has no ribbon or is not enabled + * + * @defaultValue 0 + */ + public get ribbonAwarded(): RibbonFlag { + return 0 as RibbonFlag; + } + /** * @param id {@link Challenges} The enum value for the challenge */ @@ -341,6 +348,83 @@ export abstract class Challenge { applyFlipStat(_pokemon: Pokemon, _baseStats: number[]) { return false; } + + /** + * An apply function for PARTY_HEAL. Derived classes should alter this. + * @param _status - Whether party healing is enabled or not + * @returns Whether this function did anything + */ + applyPartyHeal(_status: BooleanHolder): boolean { + return false; + } + + /** + * An apply function for SHOP. Derived classes should alter this. + * @param _status - Whether the shop is or is not available after a wave + * @returns Whether this function did anything + */ + applyShop(_status: BooleanHolder) { + return false; + } + + /** + * An apply function for POKEMON_ADD_TO_PARTY. Derived classes should alter this. + * @param _pokemon - The pokemon being caught + * @param _status - Whether the pokemon can be added to the party or not + * @return Whether this function did anything + */ + applyPokemonAddToParty(_pokemon: EnemyPokemon, _status: BooleanHolder): boolean { + return false; + } + + /** + * An apply function for POKEMON_FUSION. Derived classes should alter this. + * @param _pokemon - The pokemon being checked + * @param _status - Whether the selected pokemon is allowed to fuse or not + * @returns Whether this function did anything + */ + applyPokemonFusion(_pokemon: PlayerPokemon, _status: BooleanHolder): boolean { + return false; + } + + /** + * An apply function for POKEMON_MOVE. Derived classes should alter this. + * @param _moveId - The {@linkcode MoveId} being checked + * @param _status - A {@linkcode BooleanHolder} containing the move's usability status + * @returns Whether this function did anything + */ + applyPokemonMove(_moveId: MoveId, _status: BooleanHolder): boolean { + return false; + } + + /** + * An apply function for SHOP_ITEM. Derived classes should alter this. + * @param _shopItem - The item being checked + * @param _status - Whether the item should be added to the shop or not + * @returns Whether this function did anything + */ + applyShopItem(_shopItem: ModifierTypeOption | null, _status: BooleanHolder): boolean { + return false; + } + + /** + * An apply function for WAVE_REWARD. Derived classes should alter this. + * @param _reward - The reward being checked + * @param _status - Whether the reward should be added to the reward options or not + * @returns Whether this function did anything + */ + applyWaveReward(_reward: ModifierTypeOption | null, _status: BooleanHolder): boolean { + return false; + } + + /** + * An apply function for PREVENT_REVIVE. Derived classes should alter this. + * @param _status - Whether fainting is a permanent status or not + * @returns Whether this function did anything + */ + applyPreventRevive(_status: BooleanHolder): boolean { + return false; + } } type ChallengeCondition = (data: GameData) => boolean; @@ -349,6 +433,12 @@ type ChallengeCondition = (data: GameData) => boolean; * Implements a mono generation challenge. */ export class SingleGenerationChallenge extends Challenge { + public override get ribbonAwarded(): RibbonFlag { + // NOTE: This logic will not work for the eventual mono gen 10 ribbon, as + // as its flag will not be in sequence with the other mono gen ribbons. + return this.value ? ((RibbonData.MONO_GEN_1 << (this.value - 1)) as RibbonFlag) : 0; + } + constructor() { super(Challenges.SINGLE_GENERATION, 9); } @@ -612,6 +702,12 @@ interface monotypeOverride { * Implements a mono type challenge. */ export class SingleTypeChallenge extends Challenge { + public override get ribbonAwarded(): RibbonFlag { + // `this.value` represents the 1-based index of pokemon type + // `RibbonData.MONO_NORMAL` starts the flag position for the types, + // and we shift it by 1 for the specific type. + return this.value ? ((RibbonData.MONO_NORMAL << (this.value - 1)) as RibbonFlag) : 0; + } private static TYPE_OVERRIDES: monotypeOverride[] = [ { species: SpeciesId.CASTFORM, type: PokemonType.NORMAL, fusion: false }, ]; @@ -681,6 +777,9 @@ export class SingleTypeChallenge extends Challenge { * Implements a fresh start challenge. */ export class FreshStartChallenge extends Challenge { + public override get ribbonAwarded(): RibbonFlag { + return this.value ? RibbonData.FRESH_START : 0; + } constructor() { super(Challenges.FRESH_START, 2); } @@ -754,6 +853,9 @@ export class FreshStartChallenge extends Challenge { * Implements an inverse battle challenge. */ export class InverseBattleChallenge extends Challenge { + public override get ribbonAwarded(): RibbonFlag { + return this.value ? RibbonData.INVERSE : 0; + } constructor() { super(Challenges.INVERSE_BATTLE, 1); } @@ -787,6 +889,9 @@ export class InverseBattleChallenge extends Challenge { * Implements a flip stat challenge. */ export class FlipStatChallenge extends Challenge { + public override get ribbonAwarded(): RibbonFlag { + return this.value ? RibbonData.FLIP_STATS : 0; + } constructor() { super(Challenges.FLIP_STAT, 1); } @@ -864,208 +969,117 @@ export class LowerStarterPointsChallenge extends Challenge { } /** - * Apply all challenges that modify starter choice. - * @param challengeType {@link ChallengeType} ChallengeType.STARTER_CHOICE - * @param pokemon {@link PokemonSpecies} The pokemon to check the validity of. - * @param valid {@link BooleanHolder} A BooleanHolder, the value gets set to false if the pokemon isn't allowed. - * @param dexAttr {@link DexAttrProps} The dex attributes of the pokemon. - * @returns True if any challenge was successfully applied. + * Implements a No Support challenge */ -export function applyChallenges( - challengeType: ChallengeType.STARTER_CHOICE, - pokemon: PokemonSpecies, - valid: BooleanHolder, - dexAttr: DexAttrProps, -): boolean; -/** - * Apply all challenges that modify available total starter points. - * @param challengeType {@link ChallengeType} ChallengeType.STARTER_POINTS - * @param points {@link NumberHolder} The amount of points you have available. - * @returns True if any challenge was successfully applied. - */ -export function applyChallenges(challengeType: ChallengeType.STARTER_POINTS, points: NumberHolder): boolean; -/** - * Apply all challenges that modify the cost of a starter. - * @param challengeType {@link ChallengeType} ChallengeType.STARTER_COST - * @param species {@link SpeciesId} The pokemon to change the cost of. - * @param points {@link NumberHolder} The cost of the pokemon. - * @returns True if any challenge was successfully applied. - */ -export function applyChallenges( - challengeType: ChallengeType.STARTER_COST, - species: SpeciesId, - cost: NumberHolder, -): boolean; -/** - * Apply all challenges that modify a starter after selection. - * @param challengeType {@link ChallengeType} ChallengeType.STARTER_MODIFY - * @param pokemon {@link Pokemon} The starter pokemon to modify. - * @returns True if any challenge was successfully applied. - */ -export function applyChallenges(challengeType: ChallengeType.STARTER_MODIFY, pokemon: Pokemon): boolean; -/** - * Apply all challenges that what pokemon you can have in battle. - * @param challengeType {@link ChallengeType} ChallengeType.POKEMON_IN_BATTLE - * @param pokemon {@link Pokemon} The pokemon to check the validity of. - * @param valid {@link BooleanHolder} A BooleanHolder, the value gets set to false if the pokemon isn't allowed. - * @returns True if any challenge was successfully applied. - */ -export function applyChallenges( - challengeType: ChallengeType.POKEMON_IN_BATTLE, - pokemon: Pokemon, - valid: BooleanHolder, -): boolean; -/** - * Apply all challenges that modify what fixed battles there are. - * @param challengeType {@link ChallengeType} ChallengeType.FIXED_BATTLES - * @param waveIndex {@link Number} The current wave index. - * @param battleConfig {@link FixedBattleConfig} The battle config to modify. - * @returns True if any challenge was successfully applied. - */ -export function applyChallenges( - challengeType: ChallengeType.FIXED_BATTLES, - waveIndex: number, - battleConfig: FixedBattleConfig, -): boolean; -/** - * Apply all challenges that modify type effectiveness. - * @param challengeType {@linkcode ChallengeType} ChallengeType.TYPE_EFFECTIVENESS - * @param effectiveness {@linkcode NumberHolder} The current effectiveness of the move. - * @returns True if any challenge was successfully applied. - */ -export function applyChallenges(challengeType: ChallengeType.TYPE_EFFECTIVENESS, effectiveness: NumberHolder): boolean; -/** - * Apply all challenges that modify what level AI are. - * @param challengeType {@link ChallengeType} ChallengeType.AI_LEVEL - * @param level {@link NumberHolder} The generated level of the pokemon. - * @param levelCap {@link Number} The maximum level cap for the current wave. - * @param isTrainer {@link Boolean} Whether this is a trainer pokemon. - * @param isBoss {@link Boolean} Whether this is a non-trainer boss pokemon. - * @returns True if any challenge was successfully applied. - */ -export function applyChallenges( - challengeType: ChallengeType.AI_LEVEL, - level: NumberHolder, - levelCap: number, - isTrainer: boolean, - isBoss: boolean, -): boolean; -/** - * Apply all challenges that modify how many move slots the AI has. - * @param challengeType {@link ChallengeType} ChallengeType.AI_MOVE_SLOTS - * @param pokemon {@link Pokemon} The pokemon being considered. - * @param moveSlots {@link NumberHolder} The amount of move slots. - * @returns True if any challenge was successfully applied. - */ -export function applyChallenges( - challengeType: ChallengeType.AI_MOVE_SLOTS, - pokemon: Pokemon, - moveSlots: NumberHolder, -): boolean; -/** - * Apply all challenges that modify whether a pokemon has its passive. - * @param challengeType {@link ChallengeType} ChallengeType.PASSIVE_ACCESS - * @param pokemon {@link Pokemon} The pokemon to modify. - * @param hasPassive {@link BooleanHolder} Whether it has its passive. - * @returns True if any challenge was successfully applied. - */ -export function applyChallenges( - challengeType: ChallengeType.PASSIVE_ACCESS, - pokemon: Pokemon, - hasPassive: BooleanHolder, -): boolean; -/** - * Apply all challenges that modify the game modes settings. - * @param challengeType {@link ChallengeType} ChallengeType.GAME_MODE_MODIFY - * @returns True if any challenge was successfully applied. - */ -export function applyChallenges(challengeType: ChallengeType.GAME_MODE_MODIFY): boolean; -/** - * Apply all challenges that modify what level a pokemon can access a move. - * @param challengeType {@link ChallengeType} ChallengeType.MOVE_ACCESS - * @param pokemon {@link Pokemon} What pokemon would learn the move. - * @param moveSource {@link MoveSourceType} What source the pokemon would get the move from. - * @param move {@link MoveId} The move in question. - * @param level {@link NumberHolder} The level threshold for access. - * @returns True if any challenge was successfully applied. - */ -export function applyChallenges( - challengeType: ChallengeType.MOVE_ACCESS, - pokemon: Pokemon, - moveSource: MoveSourceType, - move: MoveId, - level: NumberHolder, -): boolean; -/** - * Apply all challenges that modify what weight a pokemon gives to move generation - * @param challengeType {@link ChallengeType} ChallengeType.MOVE_WEIGHT - * @param pokemon {@link Pokemon} What pokemon would learn the move. - * @param moveSource {@link MoveSourceType} What source the pokemon would get the move from. - * @param move {@link MoveId} The move in question. - * @param weight {@link NumberHolder} The weight of the move. - * @returns True if any challenge was successfully applied. - */ -export function applyChallenges( - challengeType: ChallengeType.MOVE_WEIGHT, - pokemon: Pokemon, - moveSource: MoveSourceType, - move: MoveId, - weight: NumberHolder, -): boolean; +export class LimitedSupportChallenge extends Challenge { + public override get ribbonAwarded(): RibbonFlag { + return this.value ? ((RibbonData.NO_HEAL << (this.value - 1)) as RibbonFlag) : 0; + } + constructor() { + super(Challenges.LIMITED_SUPPORT, 3); + } -export function applyChallenges(challengeType: ChallengeType.FLIP_STAT, pokemon: Pokemon, baseStats: number[]): boolean; - -export function applyChallenges(challengeType: ChallengeType, ...args: any[]): boolean { - let ret = false; - globalScene.gameMode.challenges.forEach(c => { - if (c.value !== 0) { - switch (challengeType) { - case ChallengeType.STARTER_CHOICE: - ret ||= c.applyStarterChoice(args[0], args[1], args[2]); - break; - case ChallengeType.STARTER_POINTS: - ret ||= c.applyStarterPoints(args[0]); - break; - case ChallengeType.STARTER_COST: - ret ||= c.applyStarterCost(args[0], args[1]); - break; - case ChallengeType.STARTER_MODIFY: - ret ||= c.applyStarterModify(args[0]); - break; - case ChallengeType.POKEMON_IN_BATTLE: - ret ||= c.applyPokemonInBattle(args[0], args[1]); - break; - case ChallengeType.FIXED_BATTLES: - ret ||= c.applyFixedBattle(args[0], args[1]); - break; - case ChallengeType.TYPE_EFFECTIVENESS: - ret ||= c.applyTypeEffectiveness(args[0]); - break; - case ChallengeType.AI_LEVEL: - ret ||= c.applyLevelChange(args[0], args[1], args[2], args[3]); - break; - case ChallengeType.AI_MOVE_SLOTS: - ret ||= c.applyMoveSlot(args[0], args[1]); - break; - case ChallengeType.PASSIVE_ACCESS: - ret ||= c.applyPassiveAccess(args[0], args[1]); - break; - case ChallengeType.GAME_MODE_MODIFY: - ret ||= c.applyGameModeModify(); - break; - case ChallengeType.MOVE_ACCESS: - ret ||= c.applyMoveAccessLevel(args[0], args[1], args[2], args[3]); - break; - case ChallengeType.MOVE_WEIGHT: - ret ||= c.applyMoveWeight(args[0], args[1], args[2], args[3]); - break; - case ChallengeType.FLIP_STAT: - ret ||= c.applyFlipStat(args[0], args[1]); - break; - } + override applyPartyHeal(status: BooleanHolder): boolean { + if (status.value) { + status.value = this.value === 2; + return true; } - }); - return ret; + return false; + } + + override applyShop(status: BooleanHolder): boolean { + if (status.value) { + status.value = this.value === 1; + return true; + } + return false; + } + + static override loadChallenge(source: LimitedSupportChallenge | any): LimitedSupportChallenge { + const newChallenge = new LimitedSupportChallenge(); + newChallenge.value = source.value; + newChallenge.severity = source.severity; + return newChallenge; + } +} + +/** + * Implements a Limited Catch challenge + */ +export class LimitedCatchChallenge extends Challenge { + public override get ribbonAwarded(): RibbonFlag { + return this.value ? RibbonData.LIMITED_CATCH : 0; + } + constructor() { + super(Challenges.LIMITED_CATCH, 1); + } + + override applyPokemonAddToParty(pokemon: EnemyPokemon, status: BooleanHolder): boolean { + if (status.value) { + status.value = pokemon.metWave % 10 === 1; + return true; + } + return false; + } + + static override loadChallenge(source: LimitedCatchChallenge | any): LimitedCatchChallenge { + const newChallenge = new LimitedCatchChallenge(); + newChallenge.value = source.value; + newChallenge.severity = source.severity; + return newChallenge; + } +} + +/** + * Implements a Permanent Faint challenge + */ +export class HardcoreChallenge extends Challenge { + public override get ribbonAwarded(): RibbonFlag { + return this.value ? RibbonData.HARDCORE : 0; + } + constructor() { + super(Challenges.HARDCORE, 1); + } + + override applyPokemonFusion(pokemon: PlayerPokemon, status: BooleanHolder): boolean { + if (!status.value) { + status.value = pokemon.isFainted(); + return true; + } + return false; + } + + override applyShopItem(shopItem: ModifierTypeOption | null, status: BooleanHolder): boolean { + status.value = shopItem?.type.group !== "revive"; + return true; + } + + override applyWaveReward(reward: ModifierTypeOption | null, status: BooleanHolder): boolean { + return this.applyShopItem(reward, status); + } + + override applyPokemonMove(moveId: MoveId, status: BooleanHolder) { + if (status.value) { + status.value = moveId !== MoveId.REVIVAL_BLESSING; + return true; + } + return false; + } + + override applyPreventRevive(status: BooleanHolder): boolean { + if (!status.value) { + status.value = true; + return true; + } + return false; + } + + static override loadChallenge(source: HardcoreChallenge | any): HardcoreChallenge { + const newChallenge = new HardcoreChallenge(); + newChallenge.value = source.value; + newChallenge.severity = source.severity; + return newChallenge; + } } /** @@ -1089,6 +1103,12 @@ export function copyChallenge(source: Challenge | any): Challenge { return InverseBattleChallenge.loadChallenge(source); case Challenges.FLIP_STAT: return FlipStatChallenge.loadChallenge(source); + case Challenges.LIMITED_CATCH: + return LimitedCatchChallenge.loadChallenge(source); + case Challenges.LIMITED_SUPPORT: + return LimitedSupportChallenge.loadChallenge(source); + case Challenges.HARDCORE: + return HardcoreChallenge.loadChallenge(source); } throw new Error("Unknown challenge copied"); } @@ -1097,87 +1117,13 @@ export const allChallenges: Challenge[] = []; export function initChallenges() { allChallenges.push( + new FreshStartChallenge(), + new HardcoreChallenge(), + new LimitedCatchChallenge(), + new LimitedSupportChallenge(), new SingleGenerationChallenge(), new SingleTypeChallenge(), - new FreshStartChallenge(), new InverseBattleChallenge(), new FlipStatChallenge(), ); } - -/** - * Apply all challenges to the given starter (and form) to check its validity. - * Differs from {@linkcode checkSpeciesValidForChallenge} which only checks form changes. - * @param species - The {@linkcode PokemonSpecies} to check the validity of. - * @param dexAttr - The {@linkcode DexAttrProps | dex attributes} of the species, including its form index. - * @param soft - If `true`, allow it if it could become valid through evolution or form change. - * @returns `true` if the species is considered valid. - */ -export function checkStarterValidForChallenge(species: PokemonSpecies, props: DexAttrProps, soft: boolean) { - if (!soft) { - const isValidForChallenge = new BooleanHolder(true); - applyChallenges(ChallengeType.STARTER_CHOICE, species, isValidForChallenge, props); - return isValidForChallenge.value; - } - // We check the validity of every evolution and form change, and require that at least one is valid - const speciesToCheck = [species.speciesId]; - while (speciesToCheck.length) { - const checking = speciesToCheck.pop(); - // Linter complains if we don't handle this - if (!checking) { - return false; - } - const checkingSpecies = getPokemonSpecies(checking); - if (checkSpeciesValidForChallenge(checkingSpecies, props, true)) { - return true; - } - if (checking && pokemonEvolutions.hasOwnProperty(checking)) { - pokemonEvolutions[checking].forEach(e => { - // Form check to deal with cases such as Basculin -> Basculegion - // TODO: does this miss anything if checking forms of a stage 2 Pokémon? - if (!e?.preFormKey || e.preFormKey === species.forms[props.formIndex].formKey) { - speciesToCheck.push(e.speciesId); - } - }); - } - } - return false; -} - -/** - * Apply all challenges to the given species (and form) to check its validity. - * Differs from {@linkcode checkStarterValidForChallenge} which also checks evolutions. - * @param species - The {@linkcode PokemonSpecies} to check the validity of. - * @param dexAttr - The {@linkcode DexAttrProps | dex attributes} of the species, including its form index. - * @param soft - If `true`, allow it if it could become valid through a form change. - * @returns `true` if the species is considered valid. - */ -function checkSpeciesValidForChallenge(species: PokemonSpecies, props: DexAttrProps, soft: boolean) { - const isValidForChallenge = new BooleanHolder(true); - applyChallenges(ChallengeType.STARTER_CHOICE, species, isValidForChallenge, props); - if (!soft || !pokemonFormChanges.hasOwnProperty(species.speciesId)) { - return isValidForChallenge.value; - } - // If the form in props is valid, return true before checking other form changes - if (soft && isValidForChallenge.value) { - return true; - } - - const result = pokemonFormChanges[species.speciesId].some(f1 => { - // Exclude form changes that require the mon to be on the field to begin with - if (!("item" in f1.trigger)) { - return false; - } - - return species.forms.some((f2, formIndex) => { - if (f1.formKey === f2.formKey) { - const formProps = { ...props, formIndex }; - const isFormValidForChallenge = new BooleanHolder(true); - applyChallenges(ChallengeType.STARTER_CHOICE, species, isFormValidForChallenge, formProps); - return isFormValidForChallenge.value; - } - return false; - }); - }); - return result; -} diff --git a/src/data/daily-run.ts b/src/data/daily-run.ts index b5fb0aa8c07..f0a20a0b02b 100644 --- a/src/data/daily-run.ts +++ b/src/data/daily-run.ts @@ -5,10 +5,9 @@ import type { PokemonSpeciesForm } 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"; -import { PlayerPokemon } from "#field/pokemon"; +import { SpeciesId } from "#enums/species-id"; import type { Starter } from "#ui/starter-select-ui-handler"; -import { randSeedGauss, randSeedInt, randSeedItem } from "#utils/common"; +import { isNullOrUndefined, randSeedGauss, randSeedInt, randSeedItem } from "#utils/common"; import { getEnumValues } from "#utils/enums"; import { getPokemonSpecies, getPokemonSpeciesForm } from "#utils/pokemon-utils"; @@ -32,15 +31,9 @@ export function getDailyRunStarters(seed: string): Starter[] { () => { const startingLevel = globalScene.gameMode.getStartingLevel(); - if (/\d{18}$/.test(seed)) { - for (let s = 0; s < 3; s++) { - const offset = 6 + s * 6; - const starterSpeciesForm = getPokemonSpeciesForm( - Number.parseInt(seed.slice(offset, offset + 4)) as SpeciesId, - Number.parseInt(seed.slice(offset + 4, offset + 6)), - ); - starters.push(getDailyRunStarter(starterSpeciesForm, startingLevel)); - } + const eventStarters = getDailyEventSeedStarters(seed); + if (!isNullOrUndefined(eventStarters)) { + starters.push(...eventStarters); return; } @@ -72,18 +65,7 @@ function getDailyRunStarter(starterSpeciesForm: PokemonSpeciesForm, startingLeve const starterSpecies = starterSpeciesForm instanceof PokemonSpecies ? starterSpeciesForm : getPokemonSpecies(starterSpeciesForm.speciesId); const formIndex = starterSpeciesForm instanceof PokemonSpecies ? undefined : starterSpeciesForm.formIndex; - const pokemon = new PlayerPokemon( - starterSpecies, - startingLevel, - undefined, - formIndex, - undefined, - undefined, - undefined, - undefined, - undefined, - undefined, - ); + const pokemon = globalScene.addPlayerPokemon(starterSpecies, startingLevel, undefined, formIndex); const starter: Starter = { species: starterSpecies, dexAttr: pokemon.getDexAttr(), @@ -145,6 +127,11 @@ const dailyBiomeWeights: BiomeWeights = { }; export function getDailyStartingBiome(): BiomeId { + const eventBiome = getDailyEventSeedBiome(globalScene.seed); + if (!isNullOrUndefined(eventBiome)) { + return eventBiome; + } + const biomes = getEnumValues(BiomeId).filter(b => b !== BiomeId.TOWN && b !== BiomeId.END); let totalWeight = 0; @@ -169,3 +156,126 @@ export function getDailyStartingBiome(): BiomeId { // TODO: should this use `randSeedItem`? return biomes[randSeedInt(biomes.length)]; } + +/** + * If this is Daily Mode and the seed is longer than a default seed + * then it has been modified and could contain a custom event seed. \ + * Default seeds are always exactly 24 characters. + * @returns `true` if it is a Daily Event Seed. + */ +export function isDailyEventSeed(seed: string): boolean { + return globalScene.gameMode.isDaily && seed.length > 24; +} + +/** + * Expects the seed to contain `/starters\d{18}/` + * where the digits alternate between 4 digits for the species ID and 2 digits for the form index + * (left padded with `0`s as necessary). + * @returns An array of {@linkcode Starter}s, or `null` if no valid match. + */ +export function getDailyEventSeedStarters(seed: string): Starter[] | null { + if (!isDailyEventSeed(seed)) { + return null; + } + + const starters: Starter[] = []; + const match = /starters(\d{4})(\d{2})(\d{4})(\d{2})(\d{4})(\d{2})/g.exec(seed); + + if (!match || match.length !== 7) { + return null; + } + + for (let i = 1; i < match.length; i += 2) { + const speciesId = Number.parseInt(match[i]) as SpeciesId; + const formIndex = Number.parseInt(match[i + 1]); + + if (!getEnumValues(SpeciesId).includes(speciesId)) { + console.warn("Invalid species ID used for custom daily run seed starter:", speciesId); + return null; + } + + const starterForm = getPokemonSpeciesForm(speciesId, formIndex); + const startingLevel = globalScene.gameMode.getStartingLevel(); + const starter = getDailyRunStarter(starterForm, startingLevel); + starters.push(starter); + } + + return starters; +} + +/** + * Expects the seed to contain `/boss\d{4}\d{2}/` + * where the first 4 digits are the species ID and the next 2 digits are the form index + * (left padded with `0`s as necessary). + * @returns A {@linkcode PokemonSpeciesForm} to be used for the boss, or `null` if no valid match. + */ +export function getDailyEventSeedBoss(seed: string): PokemonSpeciesForm | null { + if (!isDailyEventSeed(seed)) { + return null; + } + + const match = /boss(\d{4})(\d{2})/g.exec(seed); + if (!match || match.length !== 3) { + return null; + } + + const speciesId = Number.parseInt(match[1]) as SpeciesId; + const formIndex = Number.parseInt(match[2]); + + if (!getEnumValues(SpeciesId).includes(speciesId)) { + console.warn("Invalid species ID used for custom daily run seed boss:", speciesId); + return null; + } + + const starterForm = getPokemonSpeciesForm(speciesId, formIndex); + return starterForm; +} + +/** + * Expects the seed to contain `/biome\d{2}/` where the 2 digits are a biome ID (left padded with `0` if necessary). + * @returns The biome to use or `null` if no valid match. + */ +export function getDailyEventSeedBiome(seed: string): BiomeId | null { + if (!isDailyEventSeed(seed)) { + return null; + } + + const match = /biome(\d{2})/g.exec(seed); + if (!match || match.length !== 2) { + return null; + } + + const startingBiome = Number.parseInt(match[1]) as BiomeId; + + if (!getEnumValues(BiomeId).includes(startingBiome)) { + console.warn("Invalid biome ID used for custom daily run seed:", startingBiome); + return null; + } + + return startingBiome; +} + +/** + * Expects the seed to contain `/luck\d{2}/` where the 2 digits are a number between `0` and `14` + * (left padded with `0` if necessary). + * @returns The custom luck value or `null` if no valid match. + */ +export function getDailyEventSeedLuck(seed: string): number | null { + if (!isDailyEventSeed(seed)) { + return null; + } + + const match = /luck(\d{2})/g.exec(seed); + if (!match || match.length !== 2) { + return null; + } + + const luck = Number.parseInt(match[1]); + + if (luck < 0 || luck > 14) { + console.warn("Invalid luck value used for custom daily run seed:", luck); + return null; + } + + return luck; +} diff --git a/src/data/egg-hatch-data.ts b/src/data/egg-hatch-data.ts index 6aead19eb7f..e78dc4d7984 100644 --- a/src/data/egg-hatch-data.ts +++ b/src/data/egg-hatch-data.ts @@ -47,6 +47,7 @@ export class EggHatchData { caughtCount: currDexEntry.caughtCount, hatchedCount: currDexEntry.hatchedCount, ivs: [...currDexEntry.ivs], + ribbons: currDexEntry.ribbons, }; this.starterDataEntryBeforeUpdate = { moveset: currStarterDataEntry.moveset, diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 0dfbc78d7ae..5c4061ec388 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -22,7 +22,6 @@ import { TypeBoostTag, } from "#data/battler-tags"; import { getBerryEffectFunc } from "#data/berry"; -import { applyChallenges } from "#data/challenge"; import { allAbilities, allMoves } from "#data/data-lists"; import { SpeciesFormChangeRevertWeatherFormTrigger } from "#data/form-change-triggers"; import { DelayedAttackTag } from "#data/positional-tags/positional-tag"; @@ -87,12 +86,13 @@ import { PokemonHealPhase } from "#phases/pokemon-heal-phase"; import { SwitchSummonPhase } from "#phases/switch-summon-phase"; import type { AttackMoveResult } from "#types/attack-move-result"; import type { Localizable } from "#types/locales"; -import type { ChargingMove, MoveAttrMap, MoveAttrString, MoveClassMap, MoveKindString } from "#types/move-types"; +import type { ChargingMove, MoveAttrMap, MoveAttrString, MoveClassMap, MoveKindString, MoveMessageFunc } from "#types/move-types"; import type { TurnMove } from "#types/turn-move"; import { BooleanHolder, type Constructor, isNullOrUndefined, NumberHolder, randSeedFloat, randSeedInt, randSeedItem, toDmgValue } from "#utils/common"; import { getEnumValues } from "#utils/enums"; -import { toTitleCase } from "#utils/strings"; +import { toCamelCase, toTitleCase } from "#utils/strings"; import i18next from "i18next"; +import { applyChallenges } from "#utils/challenge-utils"; /** * A function used to conditionally determine execution of a given {@linkcode MoveAttr}. @@ -124,7 +124,7 @@ export abstract class Move implements Localizable { /** * Check if the move is of the given subclass without requiring `instanceof`. * - * ⚠️ Does _not_ work for {@linkcode ChargingAttackMove} and {@linkcode ChargingSelfStatusMove} subclasses. For those, + * ! Does _not_ work for {@linkcode ChargingAttackMove} and {@linkcode ChargingSelfStatusMove} subclasses. For those, * use {@linkcode isChargingMove} instead. * * @param moveKind - The string name of the move to check against @@ -162,10 +162,16 @@ export abstract class Move implements Localizable { } localize(): void { - const i18nKey = MoveId[this.id].split("_").filter(f => f).map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join("") as unknown as string; + const i18nKey = toCamelCase(MoveId[this.id]) - this.name = this.id ? `${i18next.t(`move:${i18nKey}.name`)}${this.nameAppend}` : ""; - this.effect = this.id ? `${i18next.t(`move:${i18nKey}.effect`)}${this.nameAppend}` : ""; + if (this.id === MoveId.NONE) { + this.name = ""; + this.effect = "" + return; + } + + this.name = `${i18next.t(`move:${i18nKey}.name`)}${this.nameAppend}`; + this.effect = `${i18next.t(`move:${i18nKey}.effect`)}${this.nameAppend}`; } /** @@ -1357,20 +1363,20 @@ export class MoveHeaderAttr extends MoveAttr { /** * Header attribute to queue a message at the beginning of a turn. - * @see {@link MoveHeaderAttr} */ export class MessageHeaderAttr extends MoveHeaderAttr { - private message: string | ((user: Pokemon, move: Move) => string); + /** The message to display, or a function producing one. */ + private message: string | MoveMessageFunc; - constructor(message: string | ((user: Pokemon, move: Move) => string)) { + constructor(message: string | MoveMessageFunc) { super(); this.message = message; } - apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + apply(user: Pokemon, target: Pokemon, move: Move): boolean { const message = typeof this.message === "string" ? this.message - : this.message(user, move); + : this.message(user, target, move); if (message) { globalScene.phaseManager.queueMessage(message); @@ -1418,21 +1424,21 @@ export class BeakBlastHeaderAttr extends AddBattlerTagHeaderAttr { */ export class PreMoveMessageAttr extends MoveAttr { /** The message to display or a function returning one */ - private message: string | ((user: Pokemon, target: Pokemon, move: Move) => string | undefined); + private message: string | MoveMessageFunc; /** * Create a new {@linkcode PreMoveMessageAttr} to display a message before move execution. - * @param message - The message to display before move use, either as a string or a function producing one. + * @param message - The message to display before move use, either` a literal string or a function producing one. * @remarks - * If {@linkcode message} evaluates to an empty string (`''`), no message will be displayed + * If {@linkcode message} evaluates to an empty string (`""`), no message will be displayed * (though the move will still succeed). */ - constructor(message: string | ((user: Pokemon, target: Pokemon, move: Move) => string)) { + constructor(message: string | MoveMessageFunc) { super(); this.message = message; } - apply(user: Pokemon, target: Pokemon, move: Move, _args: any[]): boolean { + apply(user: Pokemon, target: Pokemon, move: Move): boolean { const message = typeof this.message === "function" ? this.message(user, target, move) : this.message; @@ -1453,18 +1459,17 @@ export class PreMoveMessageAttr extends MoveAttr { * @extends MoveAttr */ export class PreUseInterruptAttr extends MoveAttr { - protected message?: string | ((user: Pokemon, target: Pokemon, move: Move) => string); - protected overridesFailedMessage: boolean; + protected message: string | MoveMessageFunc; protected conditionFunc: MoveConditionFunc; /** * Create a new MoveInterruptedMessageAttr. * @param message The message to display when the move is interrupted, or a function that formats the message based on the user, target, and move. */ - constructor(message?: string | ((user: Pokemon, target: Pokemon, move: Move) => string), conditionFunc?: MoveConditionFunc) { + constructor(message: string | MoveMessageFunc, conditionFunc: MoveConditionFunc) { super(); this.message = message; - this.conditionFunc = conditionFunc ?? (() => true); + this.conditionFunc = conditionFunc; } /** @@ -1485,11 +1490,9 @@ export class PreUseInterruptAttr extends MoveAttr { */ override getFailedText(user: Pokemon, target: Pokemon, move: Move): string | undefined { if (this.message && this.conditionFunc(user, target, move)) { - const message = - typeof this.message === "string" - ? (this.message as string) + return typeof this.message === "string" + ? this.message : this.message(user, target, move); - return message; } } } @@ -1694,17 +1697,30 @@ export class SurviveDamageAttr extends ModifiedDamageAttr { } } -export class SplashAttr extends MoveEffectAttr { - apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:splash")); - return true; - } -} +/** + * Move attribute to display arbitrary text during a move's execution. + */ +export class MessageAttr extends MoveEffectAttr { + /** The message to display, either as a string or a function returning one. */ + private message: string | MoveMessageFunc; -export class CelebrateAttr extends MoveEffectAttr { - apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:celebrate", { playerName: loggedInUser?.username })); - return true; + constructor(message: string | MoveMessageFunc, options?: MoveEffectAttrOptions) { + // TODO: Do we need to respect `selfTarget` if we're just displaying text? + super(false, options) + this.message = message; + } + + override apply(user: Pokemon, target: Pokemon, move: Move): boolean { + const message = typeof this.message === "function" + ? this.message(user, target, move) + : this.message; + + // TODO: Consider changing if/when MoveAttr `apply` return values become significant + if (message) { + globalScene.phaseManager.queueMessage(message, 500); + return true; + } + return false; } } @@ -5916,8 +5932,8 @@ export class ProtectAttr extends AddBattlerTagAttr { 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)) || + !(allMoves[turnMove.move].hasAttr("ProtectAttr") || + [MoveId.QUICK_GUARD, MoveId.WIDE_GUARD].includes(turnMove.move)) || turnMove.result !== MoveResult.SUCCESS ) { break; @@ -5931,38 +5947,6 @@ export class ProtectAttr extends AddBattlerTagAttr { } } -export class IgnoreAccuracyAttr extends AddBattlerTagAttr { - constructor() { - super(BattlerTagType.IGNORE_ACCURACY, true, false, 2); - } - - apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - if (!super.apply(user, target, move, args)) { - return false; - } - - globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:tookAimAtTarget", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target) })); - - return true; - } -} - -export class FaintCountdownAttr extends AddBattlerTagAttr { - constructor() { - super(BattlerTagType.PERISH_SONG, false, true, 4); - } - - apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - if (!super.apply(user, target, move, args)) { - return false; - } - - globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:faintCountdown", { pokemonName: getPokemonNameWithAffix(target), turnCount: this.turnCountMin - 1 })); - - return true; - } -} - /** * Attribute to remove all Substitutes from the field. * @extends MoveEffectAttr @@ -6603,8 +6587,10 @@ export class ChillyReceptionAttr extends ForceSwitchOutAttr { return (user, target, move) => globalScene.arena.weather?.weatherType !== WeatherType.SNOW || super.getSwitchOutCondition()(user, target, move); } } + export class RemoveTypeAttr extends MoveEffectAttr { + // TODO: Remove the message callback private removedType: PokemonType; private messageCallback: ((user: Pokemon) => void) | undefined; @@ -6906,13 +6892,19 @@ export class RandomMoveAttr extends CallMoveAttr { * @param move Move being used * @param args Unused */ - override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + override apply(user: Pokemon, target: Pokemon, _move: Move, args: any[]): boolean { + // TODO: Move this into the constructor to avoid constructing this every call const moveIds = getEnumValues(MoveId).map(m => !this.invalidMoves.has(m) && !allMoves[m].name.endsWith(" (N)") ? m : MoveId.NONE); let moveId: MoveId = MoveId.NONE; + const moveStatus = new BooleanHolder(true); do { moveId = this.getMoveOverride() ?? moveIds[user.randBattleSeedInt(moveIds.length)]; + moveStatus.value = moveId !== MoveId.NONE; + if (user.isPlayer()) { + applyChallenges(ChallengeType.POKEMON_MOVE, moveId, moveStatus); + } } - while (moveId === MoveId.NONE); + while (!moveStatus.value); return super.apply(user, target, allMoves[moveId], args); } } @@ -8293,8 +8285,6 @@ const MoveAttrs = Object.freeze({ RandomLevelDamageAttr, ModifiedDamageAttr, SurviveDamageAttr, - SplashAttr, - CelebrateAttr, RecoilAttr, SacrificialAttr, SacrificialAttrOnHit, @@ -8437,8 +8427,7 @@ const MoveAttrs = Object.freeze({ RechargeAttr, TrapAttr, ProtectAttr, - IgnoreAccuracyAttr, - FaintCountdownAttr, + MessageAttr, RemoveAllSubstitutesAttr, HitsTagAttr, HitsTagForDoubleDamageAttr, @@ -8932,7 +8921,7 @@ export function initMoves() { new AttackMove(MoveId.PSYWAVE, PokemonType.PSYCHIC, MoveCategory.SPECIAL, -1, 100, 15, -1, 0, 1) .attr(RandomLevelDamageAttr), new SelfStatusMove(MoveId.SPLASH, PokemonType.NORMAL, -1, 40, -1, 0, 1) - .attr(SplashAttr) + .attr(MessageAttr, i18next.t("moveTriggers:splash")) .condition(failOnGravityCondition), new SelfStatusMove(MoveId.ACID_ARMOR, PokemonType.POISON, -1, 20, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.DEF ], 2, true), @@ -8994,7 +8983,10 @@ export function initMoves() { .attr(AddBattlerTagAttr, BattlerTagType.TRAPPED, false, true, 1) .reflectable(), new StatusMove(MoveId.MIND_READER, PokemonType.NORMAL, -1, 5, -1, 0, 2) - .attr(IgnoreAccuracyAttr), + .attr(AddBattlerTagAttr, BattlerTagType.IGNORE_ACCURACY, true, false, 2) + .attr(MessageAttr, (user, target) => + i18next.t("moveTriggers:tookAimAtTarget", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target) }) + ), new StatusMove(MoveId.NIGHTMARE, PokemonType.GHOST, 100, 15, -1, 0, 2) .attr(AddBattlerTagAttr, BattlerTagType.NIGHTMARE) .condition(targetSleptOrComatoseCondition), @@ -9082,7 +9074,9 @@ export function initMoves() { return lastTurnMove.length === 0 || lastTurnMove[0].move !== move.id || lastTurnMove[0].result !== MoveResult.SUCCESS; }), new StatusMove(MoveId.PERISH_SONG, PokemonType.NORMAL, -1, 5, -1, 0, 2) - .attr(FaintCountdownAttr) + .attr(AddBattlerTagAttr, BattlerTagType.PERISH_SONG, false, true, 4) + .attr(MessageAttr, (_user, target) => + i18next.t("moveTriggers:faintCountdown", { pokemonName: getPokemonNameWithAffix(target), turnCount: 3 })) .ignoresProtect() .soundBased() .condition(failOnBossCondition) @@ -9098,7 +9092,10 @@ export function initMoves() { .attr(MultiHitAttr) .makesContact(false), new StatusMove(MoveId.LOCK_ON, PokemonType.NORMAL, -1, 5, -1, 0, 2) - .attr(IgnoreAccuracyAttr), + .attr(AddBattlerTagAttr, BattlerTagType.IGNORE_ACCURACY, true, false, 2) + .attr(MessageAttr, (user, target) => + i18next.t("moveTriggers:tookAimAtTarget", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target) }) + ), new AttackMove(MoveId.OUTRAGE, PokemonType.DRAGON, MoveCategory.PHYSICAL, 120, 100, 10, -1, 0, 2) .attr(FrenzyAttr) .attr(MissEffectAttr, frenzyMissFunc) @@ -9325,8 +9322,8 @@ export function initMoves() { && (user.status.effect === StatusEffect.BURN || user.status.effect === StatusEffect.POISON || user.status.effect === StatusEffect.TOXIC || user.status.effect === StatusEffect.PARALYSIS) ? 2 : 1) .attr(BypassBurnDamageReductionAttr), new AttackMove(MoveId.FOCUS_PUNCH, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 150, 100, 20, -1, -3, 3) - .attr(MessageHeaderAttr, (user, move) => i18next.t("moveTriggers:isTighteningFocus", { pokemonName: getPokemonNameWithAffix(user) })) - .attr(PreUseInterruptAttr, (user, target, move) => i18next.t("moveTriggers:lostFocus", { pokemonName: getPokemonNameWithAffix(user) }), user => !!user.turnData.attacksReceived.find(r => r.damage)) + .attr(MessageHeaderAttr, (user) => i18next.t("moveTriggers:isTighteningFocus", { pokemonName: getPokemonNameWithAffix(user) })) + .attr(PreUseInterruptAttr, (user) => i18next.t("moveTriggers:lostFocus", { pokemonName: getPokemonNameWithAffix(user) }), user => user.turnData.attacksReceived.some(r => r.damage > 0)) .punchingMove(), new AttackMove(MoveId.SMELLING_SALTS, PokemonType.NORMAL, MoveCategory.PHYSICAL, 70, 100, 10, -1, 0, 3) .attr(MovePowerMultiplierAttr, (user, target, move) => target.status?.effect === StatusEffect.PARALYSIS ? 2 : 1) @@ -10427,7 +10424,8 @@ export function initMoves() { new AttackMove(MoveId.DAZZLING_GLEAM, PokemonType.FAIRY, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 6) .target(MoveTarget.ALL_NEAR_ENEMIES), new SelfStatusMove(MoveId.CELEBRATE, PokemonType.NORMAL, -1, 40, -1, 0, 6) - .attr(CelebrateAttr), + // NB: This needs a lambda function as the user will not be logged in by the time the moves are initialized + .attr(MessageAttr, () => i18next.t("moveTriggers:celebrate", { playerName: loggedInUser?.username })), new StatusMove(MoveId.HOLD_HANDS, PokemonType.NORMAL, -1, 40, -1, 0, 6) .ignoresSubstitute() .target(MoveTarget.NEAR_ALLY), @@ -10602,7 +10600,12 @@ export function initMoves() { .attr(StatStageChangeAttr, [ Stat.SPD ], -1) .reflectable(), new SelfStatusMove(MoveId.LASER_FOCUS, PokemonType.NORMAL, -1, 30, -1, 0, 7) - .attr(AddBattlerTagAttr, BattlerTagType.ALWAYS_CRIT, true, false), + .attr(AddBattlerTagAttr, BattlerTagType.ALWAYS_CRIT, true, false) + .attr(MessageAttr, (user) => + i18next.t("battlerTags:laserFocusOnAdd", { + pokemonNameWithAffix: getPokemonNameWithAffix(user), + }), + ), new StatusMove(MoveId.GEAR_UP, PokemonType.STEEL, -1, 20, -1, 0, 7) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], 1, false, { condition: (user, target, move) => !![ AbilityId.PLUS, AbilityId.MINUS ].find(a => target.hasAbility(a, false)) }) .ignoresSubstitute() @@ -10888,7 +10891,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/moves/pokemon-move.ts b/src/data/moves/pokemon-move.ts index d3f68fe9db4..cdb8d628be1 100644 --- a/src/data/moves/pokemon-move.ts +++ b/src/data/moves/pokemon-move.ts @@ -1,15 +1,17 @@ import { allMoves } from "#data/data-lists"; -import type { MoveId } from "#enums/move-id"; +import { ChallengeType } from "#enums/challenge-type"; +import { MoveId } from "#enums/move-id"; import type { Pokemon } from "#field/pokemon"; import type { Move } from "#moves/move"; -import { toDmgValue } from "#utils/common"; +import { applyChallenges } from "#utils/challenge-utils"; +import { BooleanHolder, toDmgValue } from "#utils/common"; /** * Wrapper class for the {@linkcode Move} class for Pokemon to interact with. * These are the moves assigned to a {@linkcode Pokemon} object. * It links to {@linkcode Move} class via the move ID. * Compared to {@linkcode Move}, this class also tracks things like - * PP Ups recieved, PP used, etc. + * PP Ups received, PP used, etc. * @see {@linkcode isUsable} - checks if move is restricted, out of PP, or not implemented. * @see {@linkcode getMove} - returns {@linkcode Move} object by looking it up via ID. * @see {@linkcode usePp} - removes a point of PP from the move. @@ -45,16 +47,18 @@ export class PokemonMove { * @returns Whether this {@linkcode PokemonMove} can be selected by this Pokemon. */ isUsable(pokemon: Pokemon, ignorePp = false, ignoreRestrictionTags = false): boolean { + const move = this.getMove(); // TODO: Add Sky Drop's 1 turn stall - if (this.moveId && !ignoreRestrictionTags && pokemon.isMoveRestricted(this.moveId, pokemon)) { - return false; + const usability = new BooleanHolder( + !move.name.endsWith(" (N)") && + (ignorePp || this.ppUsed < this.getMovePp() || move.pp === -1) && + // TODO: Review if the `MoveId.NONE` check is even necessary anymore + !(this.moveId !== MoveId.NONE && !ignoreRestrictionTags && pokemon.isMoveRestricted(this.moveId, pokemon)), + ); + if (pokemon.isPlayer()) { + applyChallenges(ChallengeType.POKEMON_MOVE, move.id, usability); } - - if (this.getMove().name.endsWith(" (N)")) { - return false; - } - - return ignorePp || this.ppUsed < this.getMovePp() || this.getMove().pp === -1; + return usability.value; } getMove(): Move { 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/bug-type-superfan-encounter.ts b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts index d60ebe690ac..c5553e9bb95 100644 --- a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts +++ b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts @@ -46,7 +46,7 @@ import { } from "#mystery-encounters/mystery-encounter-requirements"; import { getRandomPartyMemberFunc, trainerConfigs } from "#trainers/trainer-config"; import { TrainerPartyCompoundTemplate, TrainerPartyTemplate } from "#trainers/trainer-party-template"; -import type { OptionSelectItem } from "#ui/abstact-option-select-ui-handler"; +import type { OptionSelectItem } from "#ui/abstract-option-select-ui-handler"; import { MoveInfoOverlay } from "#ui/move-info-overlay"; import { isNullOrUndefined, randSeedInt, randSeedShuffle } from "#utils/common"; import i18next from "i18next"; @@ -715,15 +715,13 @@ function doBugTypeMoveTutor(): Promise { const moveOptions = globalScene.currentBattle.mysteryEncounter!.misc.moveTutorOptions; await showEncounterDialogue(`${namespace}:battle_won`, `${namespace}:speaker`); - const overlayScale = 1; const moveInfoOverlay = new MoveInfoOverlay({ delayVisibility: false, - scale: overlayScale, onSide: true, right: true, x: 1, - y: -MoveInfoOverlay.getHeight(overlayScale, true) - 1, - width: globalScene.game.canvas.width / 6 - 2, + y: -MoveInfoOverlay.getHeight(true) - 1, + width: globalScene.scaledCanvas.width - 2, }); globalScene.ui.add(moveInfoOverlay); diff --git a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts index 1c85cb7595c..092cc4931af 100644 --- a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts +++ b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts @@ -45,7 +45,7 @@ import { MysteryEncounterBuilder } from "#mystery-encounters/mystery-encounter"; import { MysteryEncounterOptionBuilder } from "#mystery-encounters/mystery-encounter-option"; import { trainerConfigs } from "#trainers/trainer-config"; import { TrainerPartyCompoundTemplate, TrainerPartyTemplate } from "#trainers/trainer-party-template"; -import type { OptionSelectConfig } from "#ui/abstact-option-select-ui-handler"; +import type { OptionSelectConfig } from "#ui/abstract-option-select-ui-handler"; import { randSeedInt, randSeedShuffle } from "#utils/common"; import { getPokemonSpecies } from "#utils/pokemon-utils"; import i18next from "i18next"; diff --git a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts index 94006a43837..8dae0eaee3a 100644 --- a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts +++ b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts @@ -37,7 +37,7 @@ import { MysteryEncounterOptionBuilder } from "#mystery-encounters/mystery-encou import { MoveRequirement } from "#mystery-encounters/mystery-encounter-requirements"; import { DANCING_MOVES } from "#mystery-encounters/requirement-groups"; import { PokemonData } from "#system/pokemon-data"; -import type { OptionSelectItem } from "#ui/abstact-option-select-ui-handler"; +import type { OptionSelectItem } from "#ui/abstract-option-select-ui-handler"; import { getPokemonSpecies } from "#utils/pokemon-utils"; import i18next from "i18next"; diff --git a/src/data/mystery-encounters/encounters/dark-deal-encounter.ts b/src/data/mystery-encounters/encounters/dark-deal-encounter.ts index 29517ac2531..820c7823320 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, ]; @@ -96,6 +99,7 @@ export const DarkDealEncounter: MysteryEncounter = MysteryEncounterBuilder.withE MysteryEncounterType.DARK_DEAL, ) .withEncounterTier(MysteryEncounterTier.ROGUE) + .withDisallowedChallenges(Challenges.HARDCORE) .withIntroSpriteConfigs([ { spriteKey: "dark_deal_scientist", diff --git a/src/data/mystery-encounters/encounters/delibirdy-encounter.ts b/src/data/mystery-encounters/encounters/delibirdy-encounter.ts index 66f50f134dd..85102a01ce1 100644 --- a/src/data/mystery-encounters/encounters/delibirdy-encounter.ts +++ b/src/data/mystery-encounters/encounters/delibirdy-encounter.ts @@ -33,7 +33,7 @@ import { MoneyRequirement, } from "#mystery-encounters/mystery-encounter-requirements"; import i18next from "#plugins/i18n"; -import type { OptionSelectItem } from "#ui/abstact-option-select-ui-handler"; +import type { OptionSelectItem } from "#ui/abstract-option-select-ui-handler"; import { randSeedItem } from "#utils/common"; import { getPokemonSpecies } from "#utils/pokemon-utils"; diff --git a/src/data/mystery-encounters/encounters/field-trip-encounter.ts b/src/data/mystery-encounters/encounters/field-trip-encounter.ts index 9c655e70b8c..0413c3d0e1d 100644 --- a/src/data/mystery-encounters/encounters/field-trip-encounter.ts +++ b/src/data/mystery-encounters/encounters/field-trip-encounter.ts @@ -18,7 +18,7 @@ import { import type { MysteryEncounter } from "#mystery-encounters/mystery-encounter"; import { MysteryEncounterBuilder } from "#mystery-encounters/mystery-encounter"; import { MysteryEncounterOptionBuilder } from "#mystery-encounters/mystery-encounter-option"; -import type { OptionSelectItem } from "#ui/abstact-option-select-ui-handler"; +import type { OptionSelectItem } from "#ui/abstract-option-select-ui-handler"; import i18next from "i18next"; /** i18n namespace for the encounter */ diff --git a/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts b/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts index 347092fe0b4..ed49fccf190 100644 --- a/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts +++ b/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts @@ -42,7 +42,7 @@ import { MysteryEncounterOptionBuilder } from "#mystery-encounters/mystery-encou import { PartySizeRequirement } from "#mystery-encounters/mystery-encounter-requirements"; import { PokemonData } from "#system/pokemon-data"; import { MusicPreference } from "#system/settings"; -import type { OptionSelectItem } from "#ui/abstact-option-select-ui-handler"; +import type { OptionSelectItem } from "#ui/abstract-option-select-ui-handler"; import { isNullOrUndefined, NumberHolder, randInt, randSeedInt, randSeedItem, randSeedShuffle } from "#utils/common"; import { getPokemonSpecies } from "#utils/pokemon-utils"; import i18next from "i18next"; @@ -564,14 +564,14 @@ function generateTradeOption(alreadyUsedSpecies: PokemonSpecies[], originalBst?: function showTradeBackground() { return new Promise(resolve => { - const tradeContainer = globalScene.add.container(0, -globalScene.game.canvas.height / 6); + const tradeContainer = globalScene.add.container(0, -globalScene.scaledCanvas.height); tradeContainer.setName("Trade Background"); const flyByStaticBg = globalScene.add.rectangle( 0, 0, - globalScene.game.canvas.width / 6, - globalScene.game.canvas.height / 6, + globalScene.scaledCanvas.width, + globalScene.scaledCanvas.height, 0, ); flyByStaticBg.setName("Black Background"); 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/training-session-encounter.ts b/src/data/mystery-encounters/encounters/training-session-encounter.ts index 393f8a24e51..e56c42a3ee5 100644 --- a/src/data/mystery-encounters/encounters/training-session-encounter.ts +++ b/src/data/mystery-encounters/encounters/training-session-encounter.ts @@ -27,7 +27,7 @@ import { MysteryEncounterBuilder } from "#mystery-encounters/mystery-encounter"; import { MysteryEncounterOptionBuilder } from "#mystery-encounters/mystery-encounter-option"; import { PokemonData } from "#system/pokemon-data"; import type { HeldModifierConfig } from "#types/held-modifier-config"; -import type { OptionSelectItem } from "#ui/abstact-option-select-ui-handler"; +import type { OptionSelectItem } from "#ui/abstract-option-select-ui-handler"; import { isNullOrUndefined, randSeedShuffle } from "#utils/common"; import { getEnumValues } from "#utils/enums"; import i18next from "i18next"; 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..57b066e2ba2 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, }); @@ -648,15 +649,15 @@ function getTransformedSpecies( } function doShowDreamBackground() { - const transformationContainer = globalScene.add.container(0, -globalScene.game.canvas.height / 6); + const transformationContainer = globalScene.add.container(0, -globalScene.scaledCanvas.height); transformationContainer.name = "Dream Background"; // In case it takes a bit for video to load const transformationStaticBg = globalScene.add.rectangle( 0, 0, - globalScene.game.canvas.width / 6, - globalScene.game.canvas.height / 6, + globalScene.scaledCanvas.width, + globalScene.scaledCanvas.height, 0, ); transformationStaticBg.setName("Black Background"); diff --git a/src/data/mystery-encounters/mystery-encounter-option.ts b/src/data/mystery-encounters/mystery-encounter-option.ts index 504310eeabd..6ab2f8dae00 100644 --- a/src/data/mystery-encounters/mystery-encounter-option.ts +++ b/src/data/mystery-encounters/mystery-encounter-option.ts @@ -156,7 +156,7 @@ export class MysteryEncounterOption implements IMysteryEncounterOption { return true; } console.log( - "Mystery Encounter Edge Case: Requirement not met due to primay pokemon overlapping with support pokemon. There's no valid primary pokemon left.", + "Mystery Encounter Edge Case: Requirement not met due to primary pokemon overlapping with support pokemon. There's no valid primary pokemon left.", ); return false; } diff --git a/src/data/mystery-encounters/mystery-encounter.ts b/src/data/mystery-encounters/mystery-encounter.ts index 47dfe58cace..580fdc2ca38 100644 --- a/src/data/mystery-encounters/mystery-encounter.ts +++ b/src/data/mystery-encounters/mystery-encounter.ts @@ -576,7 +576,7 @@ export class MysteryEncounterBuilder implements Partial { */ /** - * @statif Defines the type of encounter which is used as an identifier, should be tied to a unique MysteryEncounterType + * @static Defines the type of encounter which is used as an identifier, should be tied to a unique MysteryEncounterType * NOTE: if new functions are added to {@linkcode MysteryEncounter} class * @param encounterType * @returns this @@ -605,7 +605,7 @@ export class MysteryEncounterBuilder implements Partial { } /** - * Defines an option + phasefor the encounter. + * Defines an option + phase for the encounter. * Use for easy/streamlined options. * There should be at least 2 options defined and no more than 4. * If complex use {@linkcode MysteryEncounterBuilder.withOption} @@ -627,7 +627,7 @@ export class MysteryEncounterBuilder implements Partial { } /** - * Defines an option + phasefor the encounter. + * Defines an option + phase for the encounter. * Use for easy/streamlined options. * There should be at least 2 options defined and no more than 4. * If complex use {@linkcode MysteryEncounterBuilder.withOption} diff --git a/src/data/mystery-encounters/utils/encounter-dialogue-utils.ts b/src/data/mystery-encounters/utils/encounter-dialogue-utils.ts index 1ae0659b29e..54179ee2604 100644 --- a/src/data/mystery-encounters/utils/encounter-dialogue-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-dialogue-utils.ts @@ -6,7 +6,7 @@ import { isNullOrUndefined } from "#utils/common"; import i18next from "i18next"; /** - * Will inject all relevant dialogue tokens that exist in the {@linkcode BattlegScene.currentBattle.mysteryEncounter.dialogueTokens}, into i18n text. + * Will inject all relevant dialogue tokens that exist in the {@linkcode globalScene.currentBattle.mysteryEncounter.dialogueTokens}, into i18n text. * Also adds BBCodeText fragments for colored text, if applicable * @param keyOrString * @param primaryStyle Can define a text style to be applied to the entire string. Must be defined for BBCodeText styles to be applied correctly diff --git a/src/data/mystery-encounters/utils/encounter-phase-utils.ts b/src/data/mystery-encounters/utils/encounter-phase-utils.ts index 6b085978b27..b599f923534 100644 --- a/src/data/mystery-encounters/utils/encounter-phase-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-phase-utils.ts @@ -46,7 +46,7 @@ import type { PokemonData } from "#system/pokemon-data"; import type { TrainerConfig } from "#trainers/trainer-config"; import { trainerConfigs } from "#trainers/trainer-config"; import type { HeldModifierConfig } from "#types/held-modifier-config"; -import type { OptionSelectConfig, OptionSelectItem } from "#ui/abstact-option-select-ui-handler"; +import type { OptionSelectConfig, OptionSelectItem } from "#ui/abstract-option-select-ui-handler"; import type { PartyOption, PokemonSelectFilter } from "#ui/party-ui-handler"; import { PartyUiMode } from "#ui/party-ui-handler"; import { coerceArray, isNullOrUndefined, randomString, randSeedInt, randSeedItem } from "#utils/common"; diff --git a/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts b/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts index 19f06707257..0c6a8e25452 100644 --- a/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts @@ -13,6 +13,7 @@ import { CustomPokemonData } from "#data/pokemon-data"; import type { PokemonSpecies } from "#data/pokemon-species"; import { getStatusEffectCatchRateMultiplier } from "#data/status-effect"; import type { AbilityId } from "#enums/ability-id"; +import { ChallengeType } from "#enums/challenge-type"; import { PlayerGender } from "#enums/player-gender"; import type { PokeballType } from "#enums/pokeball"; import type { PokemonType } from "#enums/pokemon-type"; @@ -33,7 +34,8 @@ import { achvs } from "#system/achv"; import type { PartyOption } from "#ui/party-ui-handler"; import { PartyUiMode } from "#ui/party-ui-handler"; import { SummaryUiMode } from "#ui/summary-ui-handler"; -import { isNullOrUndefined, randSeedInt } from "#utils/common"; +import { applyChallenges } from "#utils/challenge-utils"; +import { BooleanHolder, isNullOrUndefined, randSeedInt } from "#utils/common"; import { getPokemonSpecies } from "#utils/pokemon-utils"; import i18next from "i18next"; @@ -671,6 +673,8 @@ export async function catchPokemon( globalScene.gameData.updateSpeciesDexIvs(pokemon.species.getRootSpeciesId(true), pokemon.ivs); return new Promise(resolve => { + const addStatus = new BooleanHolder(true); + applyChallenges(ChallengeType.POKEMON_ADD_TO_PARTY, pokemon, addStatus); const doPokemonCatchMenu = () => { const end = () => { // Ensure the pokemon is in the enemy party in all situations @@ -706,6 +710,11 @@ export async function catchPokemon( }); }; Promise.all([pokemon.hideInfo(), globalScene.gameData.setPokemonCaught(pokemon)]).then(() => { + if (!(isObtain || addStatus.value)) { + removePokemon(); + end(); + return; + } if (globalScene.getPlayerParty().length === 6) { const promptRelease = () => { globalScene.ui.showText( @@ -798,10 +807,16 @@ export async function catchPokemon( }; if (showCatchObtainMessage) { + let catchMessage: string; + if (isObtain) { + catchMessage = "battle:pokemonObtained"; + } else if (addStatus.value) { + catchMessage = "battle:pokemonCaught"; + } else { + catchMessage = "battle:pokemonCaughtButChallenge"; + } globalScene.ui.showText( - i18next.t(isObtain ? "battle:pokemonObtained" : "battle:pokemonCaught", { - pokemonName: pokemon.getNameToRender(), - }), + i18next.t(catchMessage, { pokemonName: pokemon.getNameToRender() }), null, doPokemonCatchMenu, 0, diff --git a/src/data/pokemon-forms/form-change-triggers.ts b/src/data/pokemon-forms/form-change-triggers.ts index 75734bf085b..c24466eb5ec 100644 --- a/src/data/pokemon-forms/form-change-triggers.ts +++ b/src/data/pokemon-forms/form-change-triggers.ts @@ -12,6 +12,7 @@ import { WeatherType } from "#enums/weather-type"; import type { Pokemon } from "#field/pokemon"; import type { PokemonFormChangeItemModifier } from "#modifiers/modifier"; import { type Constructor, coerceArray } from "#utils/common"; +import { toCamelCase } from "#utils/strings"; import i18next from "i18next"; export abstract class SpeciesFormChangeTrigger { @@ -143,11 +144,7 @@ export class SpeciesFormChangeMoveLearnedTrigger extends SpeciesFormChangeTrigge super(); this.move = move; this.known = known; - const moveKey = MoveId[this.move] - .split("_") - .filter(f => f) - .map((f, i) => (i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase())) - .join("") as unknown as string; + const moveKey = toCamelCase(MoveId[this.move]); this.description = known ? i18next.t("pokemonEvolutions:Forms.moveLearned", { move: i18next.t(`move:${moveKey}.name`), diff --git a/src/data/trainers/trainer-config.ts b/src/data/trainers/trainer-config.ts index 5739492f96e..67618df1ddd 100644 --- a/src/data/trainers/trainer-config.ts +++ b/src/data/trainers/trainer-config.ts @@ -223,9 +223,8 @@ export class TrainerConfig { case TrainerType.LARRY_ELITE: trainerType = TrainerType.LARRY; break; - case TrainerType.ROCKET_BOSS_GIOVANNI_1: case TrainerType.ROCKET_BOSS_GIOVANNI_2: - trainerType = TrainerType.GIOVANNI; + trainerType = TrainerType.ROCKET_BOSS_GIOVANNI_1; break; case TrainerType.MAXIE_2: trainerType = TrainerType.MAXIE; @@ -895,7 +894,7 @@ export class TrainerConfig { /** * Helper function to check if a specialty type is set - * @returns true if specialtyType is defined and not Type.UNKNOWN + * @returns `true` if `specialtyType` is defined and not {@link PokemonType.UNKNOWN} */ hasSpecialtyType(): boolean { return !isNullOrUndefined(this.specialtyType) && this.specialtyType !== PokemonType.UNKNOWN; @@ -1593,9 +1592,9 @@ export const trainerConfigs: TrainerConfigs = { .setSpeciesFilter(s => tmSpecies[MoveId.FLY].indexOf(s.speciesId) > -1), [TrainerType.POKEFAN]: new TrainerConfig(++t) .setMoneyMultiplier(1.4) - .setName("PokéFan") - .setHasGenders("PokéFan Female") - .setHasDouble("PokéFan Family") + .setName("Pokéfan") + .setHasGenders("Pokéfan Female") + .setHasDouble("Pokéfan Family") .setEncounterBgm(TrainerType.POKEFAN) .setPartyTemplates( trainerPartyTemplates.SIX_WEAKER, @@ -1866,27 +1865,43 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc( 0, getRandomPartyMemberFunc([ + SpeciesId.METAPOD, + SpeciesId.LEDYBA, + SpeciesId.CLEFFA, + SpeciesId.WOOPER, + SpeciesId.TEDDIURSA, + SpeciesId.REMORAID, + SpeciesId.HOUNDOUR, + SpeciesId.SILCOON, SpeciesId.PLUSLE, SpeciesId.VOLBEAT, - SpeciesId.PACHIRISU, - SpeciesId.SILCOON, - SpeciesId.METAPOD, - SpeciesId.IGGLYBUFF, + SpeciesId.SPINDA, + SpeciesId.BONSLY, SpeciesId.PETILIL, - SpeciesId.EEVEE, + SpeciesId.SPRITZEE, + SpeciesId.MILCERY, + SpeciesId.PICHU, ]), ) .setPartyMemberFunc( 1, getRandomPartyMemberFunc( [ + SpeciesId.KAKUNA, + SpeciesId.SPINARAK, + SpeciesId.IGGLYBUFF, + SpeciesId.PALDEA_WOOPER, + SpeciesId.PHANPY, + SpeciesId.MANTYKE, + SpeciesId.ELECTRIKE, + SpeciesId.CASCOON, SpeciesId.MINUN, SpeciesId.ILLUMISE, - SpeciesId.EMOLGA, - SpeciesId.CASCOON, - SpeciesId.KAKUNA, - SpeciesId.CLEFFA, + SpeciesId.SPINDA, + SpeciesId.MIME_JR, SpeciesId.COTTONEE, + SpeciesId.SWIRLIX, + SpeciesId.FIDOUGH, SpeciesId.EEVEE, ], TrainerSlot.TRAINER_PARTNER, @@ -2562,7 +2577,7 @@ export const trainerConfigs: TrainerConfigs = { p.moveset = [ new PokemonMove(MoveId.WICKED_TORQUE), new PokemonMove(MoveId.SPIN_OUT), - new PokemonMove(MoveId.SHIFT_GEAR), + new PokemonMove(MoveId.PARTING_SHOT), new PokemonMove(MoveId.HIGH_HORSEPOWER), ]; }), @@ -2582,7 +2597,7 @@ export const trainerConfigs: TrainerConfigs = { p.moveset = [ new PokemonMove(MoveId.BLAZING_TORQUE), new PokemonMove(MoveId.SPIN_OUT), - new PokemonMove(MoveId.SHIFT_GEAR), + new PokemonMove(MoveId.FLAME_CHARGE), new PokemonMove(MoveId.HIGH_HORSEPOWER), ]; }), @@ -2602,7 +2617,7 @@ export const trainerConfigs: TrainerConfigs = { p.moveset = [ new PokemonMove(MoveId.NOXIOUS_TORQUE), new PokemonMove(MoveId.SPIN_OUT), - new PokemonMove(MoveId.SHIFT_GEAR), + new PokemonMove(MoveId.TOXIC_SPIKES), new PokemonMove(MoveId.HIGH_HORSEPOWER), ]; }), @@ -2622,7 +2637,7 @@ export const trainerConfigs: TrainerConfigs = { p.moveset = [ new PokemonMove(MoveId.MAGICAL_TORQUE), new PokemonMove(MoveId.SPIN_OUT), - new PokemonMove(MoveId.SHIFT_GEAR), + new PokemonMove(MoveId.MISTY_TERRAIN), new PokemonMove(MoveId.HIGH_HORSEPOWER), ]; }), @@ -2642,7 +2657,7 @@ export const trainerConfigs: TrainerConfigs = { p.moveset = [ new PokemonMove(MoveId.COMBAT_TORQUE), new PokemonMove(MoveId.SPIN_OUT), - new PokemonMove(MoveId.SHIFT_GEAR), + new PokemonMove(MoveId.IRON_DEFENSE), new PokemonMove(MoveId.HIGH_HORSEPOWER), ]; }), @@ -3791,27 +3806,28 @@ export const trainerConfigs: TrainerConfigs = { .setDoubleTrainerType(TrainerType.RED) .setDoubleTitle("champion_double") .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.ALAKAZAM])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.MACHAMP])) .setPartyMemberFunc( - 2, - getRandomPartyMemberFunc([SpeciesId.HO_OH], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.MASTER_BALL; - }), - ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.RHYPERIOR, SpeciesId.ELECTIVIRE])) - .setPartyMemberFunc( - 4, + 1, getRandomPartyMemberFunc( [SpeciesId.ARCANINE, SpeciesId.EXEGGUTOR, SpeciesId.GYARADOS], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); - p.setBoss(true, 2); + p.teraType = p.species.type1; }, ), ) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.RHYPERIOR, SpeciesId.ELECTIVIRE])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.MACHAMP])) + .setPartyMemberFunc( + 4, + getRandomPartyMemberFunc([SpeciesId.HO_OH], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + p.abilityIndex = 2; // Regenerator + }), + ) .setPartyMemberFunc( 5, getRandomPartyMemberFunc([SpeciesId.PIDGEOT], TrainerSlot.TRAINER, true, p => { @@ -3819,9 +3835,10 @@ export const trainerConfigs: TrainerConfigs = { p.generateAndPopulateMoveset(); p.generateName(); p.gender = Gender.MALE; + p.setBoss(true, 2); }), ) - .setInstantTera(3), // Tera Ground or Rock Rhyperior / Electric Electivire / Fire Magmortar + .setInstantTera(2), // Tera Fire Arcanine, Tera Grass Exeggutor, Tera Water Gyarados [TrainerType.RED]: new TrainerConfig(++t) .initForChampion(true) .setBattleBgm("battle_johto_champion") @@ -3832,26 +3849,24 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc( 0, getRandomPartyMemberFunc([SpeciesId.PIKACHU], TrainerSlot.TRAINER, true, p => { - p.formIndex = 8; // G-Max Pikachu - p.generateAndPopulateMoveset(); - p.generateName(); + p.formIndex = 1; // Partner Pikachu p.gender = Gender.MALE; + p.generateAndPopulateMoveset(); + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.VOLT_TACKLE)) { + // Check if Volt Tackle is in the moveset, if not, replace the first move with Volt Tackle. + p.moveset[0] = new PokemonMove(MoveId.VOLT_TACKLE); + } }), ) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.ESPEON, SpeciesId.UMBREON, SpeciesId.SYLVEON])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.MEGANIUM, SpeciesId.TYPHLOSION, SpeciesId.FERALIGATR])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.ESPEON, SpeciesId.UMBREON, SpeciesId.SYLVEON])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.SNORLAX])) .setPartyMemberFunc( - 2, + 4, getRandomPartyMemberFunc([SpeciesId.LUGIA], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; - }), - ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.MEGANIUM, SpeciesId.TYPHLOSION, SpeciesId.FERALIGATR])) - .setPartyMemberFunc( - 4, - getRandomPartyMemberFunc([SpeciesId.SNORLAX], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - p.setBoss(true, 2); + p.abilityIndex = 2; // Multiscale }), ) .setPartyMemberFunc( @@ -3865,10 +3880,11 @@ export const trainerConfigs: TrainerConfigs = { p.generateAndPopulateMoveset(); p.generateName(); p.gender = Gender.MALE; + p.setBoss(true, 2); }, ), ) - .setInstantTera(3), // Tera Grass Meganium / Fire Typhlosion / Water Feraligatr + .setInstantTera(0), // Tera Electric Pikachu [TrainerType.LANCE_CHAMPION]: new TrainerConfig(++t) .setName("Lance") .initForChampion(true) @@ -3876,37 +3892,38 @@ export const trainerConfigs: TrainerConfigs = { .setMixedBattleBgm("battle_johto_champion") .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.GYARADOS, SpeciesId.KINGDRA])) .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.AERODACTYL])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.CHARIZARD])) .setPartyMemberFunc( - 2, + 3, + getRandomPartyMemberFunc( + [SpeciesId.TYRANITAR, SpeciesId.GARCHOMP, SpeciesId.HYDREIGON], + TrainerSlot.TRAINER, + true, + p => { + p.abilityIndex = 2; // Unnerve Tyranitar, Rough Skin Garchomp, Levitate Hydreigon + p.generateAndPopulateMoveset(); + }, + ), + ) + .setPartyMemberFunc( + 4, getRandomPartyMemberFunc([SpeciesId.SALAMENCE], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Mega Salamence p.generateAndPopulateMoveset(); p.generateName(); }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.CHARIZARD])) - .setPartyMemberFunc( - 4, - getRandomPartyMemberFunc( - [SpeciesId.TYRANITAR, SpeciesId.GARCHOMP, SpeciesId.KOMMO_O], - TrainerSlot.TRAINER, - true, - p => { - p.teraType = PokemonType.DRAGON; - p.generateAndPopulateMoveset(); - p.abilityIndex = p.species.speciesId === SpeciesId.KOMMO_O ? 1 : 2; // Soundproof Kommo-o, Unnerve Tyranitar, Rough Skin Garchomp - }, - ), - ) .setPartyMemberFunc( 5, getRandomPartyMemberFunc([SpeciesId.DRAGONITE], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); + p.abilityIndex = 2; // Multiscale p.gender = Gender.MALE; p.setBoss(true, 2); + p.teraType = PokemonType.DRAGON; }), ) - .setInstantTera(4), // Tera Dragon Tyranitar / Garchomp / Kommo-o + .setInstantTera(5), // Tera Dragon Dragonite [TrainerType.STEVEN]: new TrainerConfig(++t) .initForChampion(true) .setBattleBgm("battle_hoenn_champion_g5") @@ -3914,16 +3931,22 @@ export const trainerConfigs: TrainerConfigs = { .setHasDouble("steven_wallace_double") .setDoubleTrainerType(TrainerType.WALLACE) .setDoubleTitle("champion_double") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.SKARMORY])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.CRADILY, SpeciesId.ARMALDO])) .setPartyMemberFunc( - 2, - getRandomPartyMemberFunc([SpeciesId.AGGRON], TrainerSlot.TRAINER, true, p => { + 0, + getRandomPartyMemberFunc([SpeciesId.GIGALITH], TrainerSlot.TRAINER, true, p => { + p.abilityIndex = 1; // Sand Stream + p.generateAndPopulateMoveset(); + }), + ) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.SKARMORY, SpeciesId.CLAYDOL])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.AGGRON])) + .setPartyMemberFunc( + 3, + getRandomPartyMemberFunc([SpeciesId.GOLURK, SpeciesId.RUNERIGUS], TrainerSlot.TRAINER, true, p => { + p.abilityIndex = 0; // Iron Fist Golurk, Wandering Spirit Runerigus p.generateAndPopulateMoveset(); - p.setBoss(true, 2); }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.GOLURK, SpeciesId.RUNERIGUS])) .setPartyMemberFunc( 4, getRandomPartyMemberFunc( @@ -3942,6 +3965,7 @@ export const trainerConfigs: TrainerConfigs = { p.formIndex = 1; // Mega Metagross p.generateAndPopulateMoveset(); p.generateName(); + p.setBoss(true, 2); }), ) .setInstantTera(4), // Tera Rock Regirock / Ice Regice / Steel Registeel @@ -3959,22 +3983,34 @@ export const trainerConfigs: TrainerConfigs = { p.generateAndPopulateMoveset(); }), ) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.LUDICOLO])) .setPartyMemberFunc( - 2, - getRandomPartyMemberFunc([SpeciesId.LATIAS, SpeciesId.LATIOS], TrainerSlot.TRAINER, true, p => { - p.formIndex = 1; // Mega Latios or Mega Latias + 1, + getRandomPartyMemberFunc([SpeciesId.LUDICOLO], TrainerSlot.TRAINER, true, p => { + p.abilityIndex = 0; // Swift Swim p.generateAndPopulateMoveset(); - p.generateName(); - p.pokeball = PokeballType.MASTER_BALL; }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.SWAMPERT, SpeciesId.GASTRODON, SpeciesId.SEISMITOAD])) + .setPartyMemberFunc( + 2, + getRandomPartyMemberFunc([SpeciesId.TENTACRUEL, SpeciesId.WALREIN], TrainerSlot.TRAINER, true, p => { + p.abilityIndex = p.species.speciesId === SpeciesId.TENTACRUEL ? 2 : 0; // Rain Dish Tentacruel, Thick Fat Walrein + p.generateAndPopulateMoveset(); + }), + ) + .setPartyMemberFunc( + 3, + getRandomPartyMemberFunc([SpeciesId.LATIAS, SpeciesId.LATIOS], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.generateName(); + p.pokeball = PokeballType.ULTRA_BALL; + }), + ) .setPartyMemberFunc( 4, - getRandomPartyMemberFunc([SpeciesId.REGIELEKI, SpeciesId.REGIDRAGO], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.SWAMPERT], TrainerSlot.TRAINER, true, p => { + p.formIndex = 1; // Mega Swampert p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; + p.generateName(); }), ) .setPartyMemberFunc( @@ -3985,22 +4021,14 @@ export const trainerConfigs: TrainerConfigs = { p.setBoss(true, 2); }), ) - .setInstantTera(4), // Tera Electric Regieleki / Dragon Regidrago + .setInstantTera(5), // Tera Water Milotic [TrainerType.CYNTHIA]: new TrainerConfig(++t) .initForChampion(false) .setBattleBgm("battle_sinnoh_champion") .setMixedBattleBgm("battle_sinnoh_champion") .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.SPIRITOMB])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.LUCARIO])) .setPartyMemberFunc( - 2, - getRandomPartyMemberFunc([SpeciesId.GIRATINA], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.MASTER_BALL; - }), - ) - .setPartyMemberFunc( - 3, + 1, getRandomPartyMemberFunc( [SpeciesId.MILOTIC, SpeciesId.ROSERADE, SpeciesId.HISUI_ARCANINE], TrainerSlot.TRAINER, @@ -4011,11 +4039,13 @@ export const trainerConfigs: TrainerConfigs = { }, ), ) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.TOGEKISS])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.LUCARIO])) .setPartyMemberFunc( 4, - getRandomPartyMemberFunc([SpeciesId.TOGEKISS], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.GIRATINA], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); - p.setBoss(true, 2); + p.pokeball = PokeballType.MASTER_BALL; }), ) .setPartyMemberFunc( @@ -4025,9 +4055,10 @@ export const trainerConfigs: TrainerConfigs = { p.generateAndPopulateMoveset(); p.generateName(); p.gender = Gender.FEMALE; + p.setBoss(true, 2); }), ) - .setInstantTera(3), // Tera Water Milotic / Grass Roserade / Fire Hisuian Arcanine + .setInstantTera(1), // Tera Water Milotic / Grass Roserade / Fire Hisuian Arcanine [TrainerType.ALDER]: new TrainerConfig(++t) .initForChampion(true) .setHasDouble("alder_iris_double") @@ -4050,29 +4081,26 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([SpeciesId.ZEKROM], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.MASTER_BALL; - }), + getRandomPartyMemberFunc([SpeciesId.CHANDELURE, SpeciesId.KROOKODILE, SpeciesId.REUNICLUS, SpeciesId.CONKELDURR]), ) .setPartyMemberFunc( 3, getRandomPartyMemberFunc([SpeciesId.KELDEO], TrainerSlot.TRAINER, true, p => { + p.pokeball = PokeballType.ROGUE_BALL; p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.SECRET_SWORD)) { + // Check if Secret Sword is in the moveset, if not, replace the third move with Secret Sword. + p.moveset[2] = new PokemonMove(MoveId.SECRET_SWORD); + } + p.formIndex = 1; // Resolute Form }), ) .setPartyMemberFunc( 4, - getRandomPartyMemberFunc( - [SpeciesId.CHANDELURE, SpeciesId.KROOKODILE, SpeciesId.REUNICLUS, SpeciesId.CONKELDURR], - TrainerSlot.TRAINER, - true, - p => { - p.generateAndPopulateMoveset(); - p.teraType = p.species.speciesId === SpeciesId.KROOKODILE ? PokemonType.DARK : p.species.type1; - }, - ), + getRandomPartyMemberFunc([SpeciesId.ZEKROM], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + }), ) .setPartyMemberFunc( 5, @@ -4080,9 +4108,10 @@ export const trainerConfigs: TrainerConfigs = { p.generateAndPopulateMoveset(); p.gender = Gender.MALE; p.setBoss(true, 2); + p.teraType = PokemonType.FIRE; }), ) - .setInstantTera(4), // Tera Ghost Chandelure / Dark Krookodile / Psychic Reuniclus / Fighting Conkeldurr + .setInstantTera(5), // Tera Fire Volcarona [TrainerType.IRIS]: new TrainerConfig(++t) .initForChampion(false) .setBattleBgm("battle_champion_iris") @@ -4091,34 +4120,29 @@ export const trainerConfigs: TrainerConfigs = { .setDoubleTrainerType(TrainerType.ALDER) .setDoubleTitle("champion_double") .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.DRUDDIGON])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.ARCHEOPS])) .setPartyMemberFunc( - 2, - getRandomPartyMemberFunc([SpeciesId.RESHIRAM], TrainerSlot.TRAINER, true, p => { + 1, + getRandomPartyMemberFunc([SpeciesId.ARCHEOPS], TrainerSlot.TRAINER, true, p => { + p.abilityIndex = 2; // Emergency Exit p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.MASTER_BALL; }), ) .setPartyMemberFunc( - 3, - getRandomPartyMemberFunc( - [SpeciesId.SALAMENCE, SpeciesId.HYDREIGON, SpeciesId.ARCHALUDON], - TrainerSlot.TRAINER, - true, - p => { - p.generateAndPopulateMoveset(); - p.teraType = PokemonType.DRAGON; - }, - ), - ) - .setPartyMemberFunc( - 4, + 2, getRandomPartyMemberFunc([SpeciesId.LAPRAS], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // G-Max Lapras p.generateAndPopulateMoveset(); p.generateName(); }), ) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.AGGRON, SpeciesId.HYDREIGON, SpeciesId.ARCHALUDON])) + .setPartyMemberFunc( + 4, + getRandomPartyMemberFunc([SpeciesId.RESHIRAM], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + }), + ) .setPartyMemberFunc( 5, getRandomPartyMemberFunc([SpeciesId.HAXORUS], TrainerSlot.TRAINER, true, p => { @@ -4128,37 +4152,32 @@ export const trainerConfigs: TrainerConfigs = { p.setBoss(true, 2); }), ) - .setInstantTera(3), // Tera Dragon Salamence / Hydreigon / Archaludon + .setInstantTera(5), // Tera Dragon Haxorus [TrainerType.DIANTHA]: new TrainerConfig(++t) .initForChampion(false) .setMixedBattleBgm("battle_kalos_champion") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.HAWLUCHA])) .setPartyMemberFunc( - 0, - getRandomPartyMemberFunc([SpeciesId.HAWLUCHA], TrainerSlot.TRAINER, true, p => { + 1, + getRandomPartyMemberFunc([SpeciesId.TREVENANT, SpeciesId.GOURGEIST], TrainerSlot.TRAINER, true, p => { + p.abilityIndex = 2; // Harvest Trevenant, Insomnia Gourgeist p.generateAndPopulateMoveset(); }), ) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.TREVENANT, SpeciesId.GOURGEIST])) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([SpeciesId.XERNEAS], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.MASTER_BALL; - }), - ) - .setPartyMemberFunc( - 3, getRandomPartyMemberFunc([SpeciesId.TYRANTRUM, SpeciesId.AURORUS], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.abilityIndex = 2; // Rock Head Tyrantrum, Snow Warning Aurorus p.teraType = p.species.type2!; }), ) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.GOODRA])) .setPartyMemberFunc( 4, - getRandomPartyMemberFunc([SpeciesId.GOODRA], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.XERNEAS], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); - p.setBoss(true, 2); + p.pokeball = PokeballType.MASTER_BALL; }), ) .setPartyMemberFunc( @@ -4168,9 +4187,10 @@ export const trainerConfigs: TrainerConfigs = { p.generateAndPopulateMoveset(); p.generateName(); p.gender = Gender.FEMALE; + p.setBoss(true, 2); }), ) - .setInstantTera(3), // Tera Dragon Tyrantrum / Ice Aurorus + .setInstantTera(2), // Tera Dragon Tyrantrum / Ice Aurorus [TrainerType.KUKUI]: new TrainerConfig(++t) .initForChampion(true) .setMixedBattleBgm("battle_champion_kukui") @@ -4181,7 +4201,13 @@ export const trainerConfigs: TrainerConfigs = { p.formIndex = 2; // Dusk Lycanroc }), ) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.MAGNEZONE, SpeciesId.ALOLA_NINETALES])) + .setPartyMemberFunc( + 1, + getRandomPartyMemberFunc([SpeciesId.MAGNEZONE, SpeciesId.ALOLA_NINETALES], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.abilityIndex = p.species.speciesId === SpeciesId.MAGNEZONE ? 1 : 2; // Sturdy Magnezone, Snow Warning Ninetales + }), + ) .setPartyMemberFunc( 2, getRandomPartyMemberFunc( @@ -4191,16 +4217,16 @@ export const trainerConfigs: TrainerConfigs = { p => { p.formIndex = 1; // Therian Formes p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; + p.pokeball = PokeballType.ROGUE_BALL; }, ), ) .setPartyMemberFunc( 3, - getRandomPartyMemberFunc([SpeciesId.TAPU_KOKO, SpeciesId.TAPU_FINI], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.TAPU_LELE, SpeciesId.TAPU_FINI], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); - p.setBoss(true, 2); p.pokeball = PokeballType.ULTRA_BALL; + p.abilityIndex = 0; // Psychic / Misty Surge }), ) .setPartyMemberFunc( @@ -4216,6 +4242,7 @@ export const trainerConfigs: TrainerConfigs = { p.generateAndPopulateMoveset(); p.gender = Gender.MALE; p.teraType = p.species.type2!; + p.setBoss(true, 2); }), ) .setInstantTera(5), // Tera Dark Incineroar / Fighting Hisuian Decidueye @@ -4223,28 +4250,33 @@ export const trainerConfigs: TrainerConfigs = { .initForChampion(true) .setMixedBattleBgm("battle_alola_champion") .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.ALOLA_RAICHU])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.NOIVERN])) + .setPartyMemberFunc( + 1, + getRandomPartyMemberFunc([SpeciesId.NOIVERN], TrainerSlot.TRAINER, true, p => { + p.abilityIndex = 1; // Infiltrator + p.generateAndPopulateMoveset(); + }), + ) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([SpeciesId.SOLGALEO], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.BLACEPHALON, SpeciesId.STAKATAKA], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.MASTER_BALL; + p.pokeball = PokeballType.ROGUE_BALL; }), ) .setPartyMemberFunc( 3, - getRandomPartyMemberFunc([SpeciesId.TAPU_LELE, SpeciesId.TAPU_BULU], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.TAPU_KOKO, SpeciesId.TAPU_BULU], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; - p.teraType = p.species.type1; + p.abilityIndex = 0; // Electric / Grassy Surge }), ) .setPartyMemberFunc( 4, - getRandomPartyMemberFunc([SpeciesId.ZYGARDE], TrainerSlot.TRAINER, true, p => { - p.formIndex = 1; // Zygarde 10% forme, Aura Break + getRandomPartyMemberFunc([SpeciesId.SOLGALEO], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ROGUE_BALL; + p.pokeball = PokeballType.MASTER_BALL; }), ) .setPartyMemberFunc( @@ -4253,34 +4285,35 @@ export const trainerConfigs: TrainerConfigs = { p.generateAndPopulateMoveset(); p.setBoss(true, 2); p.gender = p.species.speciesId === SpeciesId.PRIMARINA ? Gender.FEMALE : Gender.MALE; + p.teraType = p.species.speciesId === SpeciesId.PRIMARINA ? PokemonType.WATER : PokemonType.GHOST; }), ) - .setInstantTera(3), // Tera Psychic Tapu Lele / Grass Tapu Bulu + .setInstantTera(5), // Tera Ghost Decidueye, Water Primarina [TrainerType.LEON]: new TrainerConfig(++t) .initForChampion(true) .setMixedBattleBgm("battle_galar_champion") .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.AEGISLASH])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.RHYPERIOR, SpeciesId.SEISMITOAD, SpeciesId.MR_RIME])) .setPartyMemberFunc( - 2, + 1, + getRandomPartyMemberFunc( + [SpeciesId.RHYPERIOR, SpeciesId.SEISMITOAD, SpeciesId.MR_RIME], + TrainerSlot.TRAINER, + true, + p => { + p.abilityIndex = 1; // Solid Rock Rhyperior, Poison Touch Seismitoad, Screen Cleaner Mr. Rime + p.generateAndPopulateMoveset(); + }, + ), + ) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.DRAGAPULT])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.RILLABOOM, SpeciesId.CINDERACE, SpeciesId.INTELEON])) + .setPartyMemberFunc( + 4, getRandomPartyMemberFunc([SpeciesId.ZACIAN], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.DRAGAPULT])) - .setPartyMemberFunc( - 4, - getRandomPartyMemberFunc( - [SpeciesId.RILLABOOM, SpeciesId.CINDERACE, SpeciesId.INTELEON], - TrainerSlot.TRAINER, - true, - p => { - p.generateAndPopulateMoveset(); - p.setBoss(true, 2); - }, - ), - ) .setPartyMemberFunc( 5, getRandomPartyMemberFunc([SpeciesId.CHARIZARD], TrainerSlot.TRAINER, true, p => { @@ -4288,22 +4321,23 @@ export const trainerConfigs: TrainerConfigs = { p.generateAndPopulateMoveset(); p.generateName(); p.gender = Gender.MALE; + p.setBoss(true, 2); }), ) - .setInstantTera(3), // Tera Dragapult to Ghost or Dragon + .setInstantTera(3), // Tera Grass Rillaboom, Fire Cinderace, Water Inteleon [TrainerType.MUSTARD]: new TrainerConfig(++t) .initForChampion(true) .setMixedBattleBgm("battle_mustard") .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([SpeciesId.CORVIKNIGHT], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.MIENSHAO], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; }), ) .setPartyMemberFunc( 1, - getRandomPartyMemberFunc([SpeciesId.KOMMO_O], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.CORVIKNIGHT], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; }), @@ -4312,36 +4346,46 @@ export const trainerConfigs: TrainerConfigs = { 2, getRandomPartyMemberFunc([SpeciesId.GALAR_SLOWBRO, SpeciesId.GALAR_SLOWKING], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); + p.abilityIndex = p.species.speciesId === SpeciesId.GALAR_SLOWBRO ? 0 : 2; // Quick Draw Galar Slowbro, Regenerator Galar Slowking p.pokeball = PokeballType.ULTRA_BALL; - p.teraType = p.species.type1; }), ) .setPartyMemberFunc( 3, - getRandomPartyMemberFunc([SpeciesId.GALAR_DARMANITAN], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); + getRandomPartyMemberFunc([SpeciesId.VENUSAUR, SpeciesId.BLASTOISE], TrainerSlot.TRAINER, true, p => { p.pokeball = PokeballType.ULTRA_BALL; }), ) .setPartyMemberFunc( 4, - getRandomPartyMemberFunc([SpeciesId.BLASTOISE, SpeciesId.VENUSAUR], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.KOMMO_O], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); - p.setBoss(true, 2); p.pokeball = PokeballType.ULTRA_BALL; + p.generateAndPopulateMoveset(); }), ) .setPartyMemberFunc( 5, getRandomPartyMemberFunc([SpeciesId.URSHIFU], TrainerSlot.TRAINER, true, p => { - p.formIndex = randSeedIntRange(2, 3); // Random G-Max Urshifu - p.generateAndPopulateMoveset(); + p.formIndex = randSeedIntRange(2, 3); // Random G-Max Urshifu form p.generateName(); p.gender = Gender.MALE; p.pokeball = PokeballType.ULTRA_BALL; + p.setBoss(true, 2); + if (p.formIndex === 2) { + p.moveset[0] = new PokemonMove(MoveId.WICKED_BLOW); + p.moveset[1] = new PokemonMove(MoveId.BRICK_BREAK); + p.moveset[2] = new PokemonMove(randSeedItem([MoveId.FIRE_PUNCH, MoveId.THUNDER_PUNCH, MoveId.ICE_PUNCH])); + p.moveset[3] = new PokemonMove(MoveId.FOCUS_ENERGY); + } else if (p.formIndex === 3) { + p.moveset[0] = new PokemonMove(MoveId.SURGING_STRIKES); + p.moveset[1] = new PokemonMove(MoveId.BRICK_BREAK); + p.moveset[2] = new PokemonMove(randSeedItem([MoveId.FIRE_PUNCH, MoveId.THUNDER_PUNCH, MoveId.ICE_PUNCH])); + p.moveset[3] = new PokemonMove(MoveId.FOCUS_ENERGY); + } }), ) - .setInstantTera(2), // Tera Poison Galar-Slowbro / Galar-Slowking + .setInstantTera(4), // Tera Fighting Kommo-o [TrainerType.GEETA]: new TrainerConfig(++t) .initForChampion(false) .setMixedBattleBgm("battle_champion_geeta") @@ -4353,16 +4397,22 @@ export const trainerConfigs: TrainerConfigs = { p.setBoss(true, 2); }), ) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.ESPATHRA, SpeciesId.VELUZA])) .setPartyMemberFunc( - 2, + 1, + getRandomPartyMemberFunc([SpeciesId.ESPATHRA], TrainerSlot.TRAINER, true, p => { + p.abilityIndex = 0; // Opportunist + p.generateAndPopulateMoveset(); + }), + ) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.BAXCALIBUR])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.CHESNAUGHT, SpeciesId.DELPHOX, SpeciesId.GRENINJA])) + .setPartyMemberFunc( + 4, getRandomPartyMemberFunc([SpeciesId.MIRAIDON], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.BAXCALIBUR])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.CHESNAUGHT, SpeciesId.DELPHOX, SpeciesId.GRENINJA])) .setPartyMemberFunc( 5, getRandomPartyMemberFunc([SpeciesId.KINGAMBIT], TrainerSlot.TRAINER, true, p => { @@ -4389,19 +4439,19 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.PAWMOT])) .setPartyMemberFunc( 2, + getRandomPartyMemberFunc([SpeciesId.DUDUNSPARCE], TrainerSlot.TRAINER, true, p => { + p.abilityIndex = 0; // Serene Grace + p.generateAndPopulateMoveset(); + }), + ) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.ARMAROUGE, SpeciesId.CERULEDGE])) + .setPartyMemberFunc( + 4, getRandomPartyMemberFunc([SpeciesId.KORAIDON], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.GHOLDENGO])) - .setPartyMemberFunc( - 4, - getRandomPartyMemberFunc([SpeciesId.ARMAROUGE, SpeciesId.CERULEDGE], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - p.teraType = p.species.type2!; - }), - ) .setPartyMemberFunc( 5, getRandomPartyMemberFunc( @@ -4412,10 +4462,11 @@ export const trainerConfigs: TrainerConfigs = { p.generateAndPopulateMoveset(); p.gender = Gender.MALE; p.setBoss(true, 2); + p.teraType = p.species.type2!; }, ), ) - .setInstantTera(4), // Tera Psychic Armarouge / Ghost Ceruledge + .setInstantTera(5), // Tera Dark Meowscarada, Ghost Skeledirge, Fighting Quaquaval [TrainerType.KIERAN]: new TrainerConfig(++t) .initForChampion(true) .setMixedBattleBgm("battle_champion_kieran") @@ -4429,9 +4480,9 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([SpeciesId.TERAPAGOS], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.DRAGONITE], TrainerSlot.TRAINER, true, p => { + p.abilityIndex = 2; // Multiscale p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.MASTER_BALL; }), ) .setPartyMemberFunc( @@ -4443,25 +4494,29 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 4, - getRandomPartyMemberFunc([SpeciesId.OGERPON], TrainerSlot.TRAINER, true, p => { - p.formIndex = randSeedInt(4); // Random Ogerpon Tera Mask + getRandomPartyMemberFunc([SpeciesId.TERAPAGOS], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.IVY_CUDGEL)) { - // Check if Ivy Cudgel is in the moveset, if not, replace the first move with Ivy Cudgel. - p.moveset[0] = new PokemonMove(MoveId.IVY_CUDGEL); + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.TERA_STARSTORM)) { + // Check if Tera Starstorm is in the moveset, if not, replace the first move with Tera Starstorm. + p.moveset[0] = new PokemonMove(MoveId.TERA_STARSTORM); } + p.pokeball = PokeballType.MASTER_BALL; }), ) .setPartyMemberFunc( 5, getRandomPartyMemberFunc([SpeciesId.HYDRAPPLE], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); p.gender = Gender.MALE; p.setBoss(true, 2); + p.teraType = PokemonType.FIGHTING; + p.generateAndPopulateMoveset(); + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.TERA_BLAST)) { + // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. + p.moveset[2] = new PokemonMove(MoveId.TERA_BLAST); + } }), ) - .setInstantTera(4), // Tera Ogerpon + .setInstantTera(5), // Tera Fighting Hydrapple [TrainerType.RIVAL]: new TrainerConfig((t = TrainerType.RIVAL)) .setName("Finn") @@ -4974,21 +5029,21 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.NIDOQUEEN, SpeciesId.NIDOKING])) .setPartyMemberFunc( 4, - getRandomPartyMemberFunc([SpeciesId.RHYPERIOR], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - p.abilityIndex = 1; // Solid Rock - }), - ) - .setPartyMemberFunc( - 5, getRandomPartyMemberFunc([SpeciesId.KANGASKHAN], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; p.formIndex = 1; // Mega Kangaskhan p.generateName(); }), + ) + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([SpeciesId.RHYPERIOR], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.abilityIndex = 1; // Solid Rock + p.setBoss(true, 2); + }), ), [TrainerType.ROCKET_BOSS_GIOVANNI_2]: new TrainerConfig(++t) .setName("Giovanni") @@ -4997,52 +5052,53 @@ export const trainerConfigs: TrainerConfigs = { .setVictoryBgm("victory_team_plasma") .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([SpeciesId.TYRANITAR], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.RHYPERIOR], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); + p.abilityIndex = 1; // Solid Rock p.pokeball = PokeballType.ULTRA_BALL; }), ) .setPartyMemberFunc( 1, - getRandomPartyMemberFunc([SpeciesId.GASTRODON, SpeciesId.SEISMITOAD], TrainerSlot.TRAINER, true, p => { - if (p.species.speciesId === SpeciesId.GASTRODON) { - p.abilityIndex = 0; // Storm Drain - } else if (p.species.speciesId === SpeciesId.SEISMITOAD) { - p.abilityIndex = 2; // Water Absorb - } + getRandomPartyMemberFunc([SpeciesId.NIDOKING, SpeciesId.NIDOQUEEN], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.abilityIndex = 2; // Sheer Force }), ) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([SpeciesId.GARCHOMP, SpeciesId.EXCADRILL], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.HONCHKROW], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - if (p.species.speciesId === SpeciesId.GARCHOMP) { - p.abilityIndex = 2; // Rough Skin - } else if (p.species.speciesId === SpeciesId.EXCADRILL) { - p.abilityIndex = 0; // Sand Rush + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.SUCKER_PUNCH)) { + // Check if Sucker Punch is in the moveset, if not, replace the third move with Sucker Punch. + p.moveset[2] = new PokemonMove(MoveId.SUCKER_PUNCH); } }), ) .setPartyMemberFunc( 3, - getRandomPartyMemberFunc([SpeciesId.RHYPERIOR], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - p.abilityIndex = 1; // Solid Rock - }), - ) - .setPartyMemberFunc( - 4, getRandomPartyMemberFunc([SpeciesId.KANGASKHAN], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; p.formIndex = 1; // Mega Kangaskhan p.generateName(); }), ) + .setPartyMemberFunc( + 4, + getRandomPartyMemberFunc( + [SpeciesId.ARTICUNO, SpeciesId.ZAPDOS, SpeciesId.MOLTRES], + TrainerSlot.TRAINER, + true, + p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.abilityIndex = 2; // Snow Cloak Articuno, Static Zapdos, Flame Body Moltres + p.setBoss(true, 2); + }, + ), + ) .setPartyMemberFunc( 5, getRandomPartyMemberFunc([SpeciesId.MEWTWO], TrainerSlot.TRAINER, true, p => { @@ -5056,16 +5112,22 @@ export const trainerConfigs: TrainerConfigs = { .initForEvilTeamLeader("Magma Boss", []) .setMixedBattleBgm("battle_aqua_magma_boss") .setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.SOLROCK])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.TALONFLAME])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.WEEZING, SpeciesId.GALAR_WEEZING])) .setPartyMemberFunc( - 3, + 0, getRandomPartyMemberFunc([SpeciesId.TORKOAL], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.abilityIndex = 1; // Drought }), ) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.SOLROCK])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.WEEZING, SpeciesId.GALAR_WEEZING])) + .setPartyMemberFunc( + 3, + getRandomPartyMemberFunc([SpeciesId.SCOVILLAIN], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.abilityIndex = 0; // Chlorophyll + }), + ) .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.DONPHAN])) .setPartyMemberFunc( 5, @@ -5140,16 +5202,16 @@ export const trainerConfigs: TrainerConfigs = { .initForEvilTeamLeader("Aqua Boss", []) .setMixedBattleBgm("battle_aqua_magma_boss") .setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.LUDICOLO])) .setPartyMemberFunc( - 1, + 0, getRandomPartyMemberFunc([SpeciesId.PELIPPER], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.abilityIndex = 1; // Drizzle }), ) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.WAILORD])) .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.MUK, SpeciesId.ALOLA_MUK])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.WAILORD])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.LUDICOLO])) .setPartyMemberFunc( 4, getRandomPartyMemberFunc([SpeciesId.QWILFISH], TrainerSlot.TRAINER, true, p => { @@ -5225,7 +5287,7 @@ export const trainerConfigs: TrainerConfigs = { .setMixedBattleBgm("battle_galactic_boss") .setVictoryBgm("victory_team_plasma") .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.GYARADOS])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.HONCHKROW, SpeciesId.HISUI_BRAVIARY])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.CROBAT, SpeciesId.HONCHKROW])) .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.MAGNEZONE])) .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.UXIE, SpeciesId.MESPRIT, SpeciesId.AZELF])) .setPartyMemberFunc( @@ -5233,8 +5295,6 @@ export const trainerConfigs: TrainerConfigs = { getRandomPartyMemberFunc([SpeciesId.HOUNDOOM], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; - p.formIndex = 1; // Mega Houndoom - p.generateName(); }), ) .setPartyMemberFunc( @@ -5253,7 +5313,7 @@ export const trainerConfigs: TrainerConfigs = { .setVictoryBgm("victory_team_plasma") .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([SpeciesId.CROBAT], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.CROBAT, SpeciesId.HONCHKROW], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -5374,24 +5434,8 @@ export const trainerConfigs: TrainerConfigs = { p.gender = Gender.MALE; }), ) - .setPartyMemberFunc( - 3, - getRandomPartyMemberFunc([SpeciesId.DRAGALGE, SpeciesId.CLAWITZER], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - if (p.species.speciesId === SpeciesId.DRAGALGE) { - p.abilityIndex = 2; // Adaptability - } else if (p.species.speciesId === SpeciesId.CLAWITZER) { - p.abilityIndex = 0; // Mega Launcher - } - }), - ) - .setPartyMemberFunc( - 4, - getRandomPartyMemberFunc([SpeciesId.GALLADE], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - p.abilityIndex = 1; // Sharpness - }), - ) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.MALAMAR])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.AEGISLASH, SpeciesId.HISUI_GOODRA])) .setPartyMemberFunc( 5, getRandomPartyMemberFunc([SpeciesId.GYARADOS], TrainerSlot.TRAINER, true, p => { @@ -5416,21 +5460,11 @@ export const trainerConfigs: TrainerConfigs = { p.gender = Gender.MALE; }), ) - .setPartyMemberFunc( - 1, - getRandomPartyMemberFunc([SpeciesId.DRAGALGE, SpeciesId.CLAWITZER], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - if (p.species.speciesId === SpeciesId.DRAGALGE) { - p.abilityIndex = 2; // Adaptability - } else if (p.species.speciesId === SpeciesId.CLAWITZER) { - p.abilityIndex = 0; // Mega Launcher - } - }), - ) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.MIENSHAO])) .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.AEGISLASH, SpeciesId.HISUI_GOODRA])) .setPartyMemberFunc( 3, - getRandomPartyMemberFunc([SpeciesId.IRON_VALIANT], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.VOLCANION], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ROGUE_BALL; }), @@ -5467,10 +5501,10 @@ export const trainerConfigs: TrainerConfigs = { p.gender = Gender.FEMALE; }), ) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.LILLIGANT, SpeciesId.HISUI_LILLIGANT])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.MILOTIC, SpeciesId.PRIMARINA])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.LILLIGANT])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.MILOTIC])) .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.GALAR_SLOWBRO, SpeciesId.GALAR_SLOWKING])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.BEWEAR])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.BEWEAR, SpeciesId.LOPUNNY])) .setPartyMemberFunc( 5, getRandomPartyMemberFunc([SpeciesId.NIHILEGO], TrainerSlot.TRAINER, true, p => { @@ -5492,7 +5526,7 @@ export const trainerConfigs: TrainerConfigs = { p.gender = Gender.FEMALE; }), ) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.MILOTIC, SpeciesId.PRIMARINA])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.MILOTIC, SpeciesId.LILLIGANT])) .setPartyMemberFunc( 2, getRandomPartyMemberFunc([SpeciesId.SILVALLY], TrainerSlot.TRAINER, true, p => { @@ -5572,7 +5606,11 @@ export const trainerConfigs: TrainerConfigs = { getRandomPartyMemberFunc([SpeciesId.GOLISOPOD], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); - p.gender = Gender.MALE; + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.FIRST_IMPRESSION)) { + // Check if First Impression is in the moveset, if not, replace the third move with First Impression. + p.moveset[2] = new PokemonMove(MoveId.FIRST_IMPRESSION); + p.gender = Gender.MALE; + } }), ), [TrainerType.GUZMA_2]: new TrainerConfig(++t) @@ -5585,8 +5623,12 @@ export const trainerConfigs: TrainerConfigs = { getRandomPartyMemberFunc([SpeciesId.GOLISOPOD], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); - p.abilityIndex = 2; // Anticipation - p.gender = Gender.MALE; + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.FIRST_IMPRESSION)) { + // Check if First Impression is in the moveset, if not, replace the third move with First Impression. + p.moveset[2] = new PokemonMove(MoveId.FIRST_IMPRESSION); + p.abilityIndex = 2; // Anticipation + p.gender = Gender.MALE; + } }), ) .setPartyMemberFunc( @@ -5615,7 +5657,7 @@ export const trainerConfigs: TrainerConfigs = { getRandomPartyMemberFunc([SpeciesId.GENESECT], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; + p.pokeball = PokeballType.ROGUE_BALL; p.formIndex = randSeedInt(4, 1); // Shock, Burn, Chill, or Douse Drive if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.TECHNO_BLAST)) { // Check if Techno Blast is in the moveset, if not, replace the third move with Techno Blast. @@ -5697,13 +5739,7 @@ export const trainerConfigs: TrainerConfigs = { p.pokeball = PokeballType.ULTRA_BALL; }), ) - .setPartyMemberFunc( - 1, - getRandomPartyMemberFunc([SpeciesId.AEGISLASH, SpeciesId.GHOLDENGO], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - }), - ) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.CORVIKNIGHT])) .setPartyMemberFunc( 2, getRandomPartyMemberFunc([SpeciesId.DRACOZOLT, SpeciesId.DRACOVISH], TrainerSlot.TRAINER, true, p => { @@ -5721,6 +5757,17 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 4, + getRandomPartyMemberFunc([SpeciesId.COPPERAJAH], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.formIndex = 1; // G-Max Copperajah + p.generateName(); + p.pokeball = PokeballType.ULTRA_BALL; + p.gender = Gender.FEMALE; + }), + ) + .setPartyMemberFunc( + 5, getRandomPartyMemberFunc( [SpeciesId.GALAR_ARTICUNO, SpeciesId.GALAR_ZAPDOS, SpeciesId.GALAR_MOLTRES], TrainerSlot.TRAINER, @@ -5731,33 +5778,27 @@ export const trainerConfigs: TrainerConfigs = { p.pokeball = PokeballType.ULTRA_BALL; }, ), - ) - .setPartyMemberFunc( - 5, - getRandomPartyMemberFunc([SpeciesId.COPPERAJAH], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.formIndex = 1; // G-Max Copperajah - p.generateName(); - p.pokeball = PokeballType.ULTRA_BALL; - p.gender = Gender.FEMALE; - }), ), [TrainerType.PENNY]: new TrainerConfig(++t) .setName("Cassiopeia") .initForEvilTeamLeader("Star Boss", []) .setMixedBattleBgm("battle_star_boss") .setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.JOLTEON, SpeciesId.LEAFEON])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.VAPOREON, SpeciesId.UMBREON])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.ESPEON, SpeciesId.GLACEON])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.FLAREON])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.ESPEON])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.UMBREON])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.LEAFEON, SpeciesId.GLACEON])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.VAPOREON, SpeciesId.FLAREON, SpeciesId.JOLTEON])) .setPartyMemberFunc( 4, getRandomPartyMemberFunc([SpeciesId.SYLVEON], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); p.abilityIndex = 2; // Pixilate p.generateAndPopulateMoveset(); - p.gender = Gender.FEMALE; + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.HYPER_VOICE)) { + // Check if Hyper Voice is in the moveset, if not, replace the second move with Hyper Voice. + p.moveset[1] = new PokemonMove(MoveId.HYPER_VOICE); + p.gender = Gender.FEMALE; + } }), ) .setPartyMemberFunc( @@ -5770,7 +5811,7 @@ export const trainerConfigs: TrainerConfigs = { p.generateName(); }), ) - .setInstantTera(4), // Tera Fairy Sylveon + .setInstantTera(3), // Tera Fairy Sylveon [TrainerType.PENNY_2]: new TrainerConfig(++t) .setName("Cassiopeia") .initForEvilTeamLeader("Star Boss", [], true) @@ -5782,7 +5823,11 @@ export const trainerConfigs: TrainerConfigs = { p.setBoss(true, 2); p.abilityIndex = 2; // Pixilate p.generateAndPopulateMoveset(); - p.gender = Gender.FEMALE; + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.HYPER_VOICE)) { + // Check if Hyper Voice is in the moveset, if not, replace the second move with Hyper Voice. + p.moveset[1] = new PokemonMove(MoveId.HYPER_VOICE); + p.gender = Gender.FEMALE; + } }), ) .setPartyMemberFunc( @@ -5794,25 +5839,30 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([SpeciesId.RAIKOU, SpeciesId.ENTEI, SpeciesId.SUICUNE], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.ESPEON, SpeciesId.UMBREON], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; + p.abilityIndex = p.species.speciesId === SpeciesId.UMBREON ? 0 : 2; // Synchronize Umbreon, Magic Bounce Espeon }), ) .setPartyMemberFunc( 3, + getRandomPartyMemberFunc( + [SpeciesId.WALKING_WAKE, SpeciesId.GOUGING_FIRE, SpeciesId.RAGING_BOLT], + TrainerSlot.TRAINER, + true, + p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ROGUE_BALL; + }, + ), + ) + .setPartyMemberFunc( + 4, getRandomPartyMemberFunc([SpeciesId.REVAVROOM], TrainerSlot.TRAINER, true, p => { p.formIndex = randSeedInt(5, 1); // Random Starmobile form p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ROGUE_BALL; - }), - ) - .setPartyMemberFunc( - 4, - getRandomPartyMemberFunc([SpeciesId.ZAMAZENTA], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.MASTER_BALL; }), ) .setPartyMemberFunc( @@ -5826,6 +5876,7 @@ export const trainerConfigs: TrainerConfigs = { }), ) .setInstantTera(0), // Tera Fairy Sylveon + [TrainerType.BUCK]: new TrainerConfig(++t) .setName("Buck") .initForStatTrainer(true) diff --git a/src/enums/ability-id.ts b/src/enums/ability-id.ts index c9681fb1109..f054c7b574e 100644 --- a/src/enums/ability-id.ts +++ b/src/enums/ability-id.ts @@ -1,624 +1,624 @@ export enum AbilityId { - /**{@link https://bulbapedia.bulbagarden.net/wiki/None_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/None_(ability) | Source} */ NONE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Stench_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Stench_(ability) | Source} */ STENCH, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Drizzle_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Drizzle_(ability) | Source} */ DRIZZLE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Speed_Boost_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Speed_Boost_(ability) | Source} */ SPEED_BOOST, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Battle_Armor_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Battle_Armor_(ability) | Source} */ BATTLE_ARMOR, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Sturdy_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Sturdy_(ability) | Source} */ STURDY, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Damp_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Damp_(ability) | Source} */ DAMP, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Limber_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Limber_(ability) | Source} */ LIMBER, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Sand_Veil_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Sand_Veil_(ability) | Source} */ SAND_VEIL, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Static_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Static_(ability) | Source} */ STATIC, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Volt_Absorb_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Volt_Absorb_(ability) | Source} */ VOLT_ABSORB, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Water_Absorb_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Water_Absorb_(ability) | Source} */ WATER_ABSORB, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Oblivious_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Oblivious_(ability) | Source} */ OBLIVIOUS, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Cloud_Nine_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Cloud_Nine_(ability) | Source} */ CLOUD_NINE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Compound_Eyes_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Compound_Eyes_(ability) | Source} */ COMPOUND_EYES, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Insomnia_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Insomnia_(ability) | Source} */ INSOMNIA, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Color_Change_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Color_Change_(ability) | Source} */ COLOR_CHANGE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Immunity_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Immunity_(ability) | Source} */ IMMUNITY, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Flash_Fire_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Flash_Fire_(ability) | Source} */ FLASH_FIRE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Shield_Dust_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Shield_Dust_(ability) | Source} */ SHIELD_DUST, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Own_Tempo_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Own_Tempo_(ability) | Source} */ OWN_TEMPO, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Suction_Cups_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Suction_Cups_(ability) | Source} */ SUCTION_CUPS, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Intimidate_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Intimidate_(ability) | Source} */ INTIMIDATE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Shadow_Tag_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Shadow_Tag_(ability) | Source} */ SHADOW_TAG, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Rough_Skin_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Rough_Skin_(ability) | Source} */ ROUGH_SKIN, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Wonder_Guard_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Wonder_Guard_(ability) | Source} */ WONDER_GUARD, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Levitate_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Levitate_(ability) | Source} */ LEVITATE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Effect_Spore_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Effect_Spore_(ability) | Source} */ EFFECT_SPORE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Synchronize_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Synchronize_(ability) | Source} */ SYNCHRONIZE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Clear_Body_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Clear_Body_(ability) | Source} */ CLEAR_BODY, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Natural_Cure_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Natural_Cure_(ability) | Source} */ NATURAL_CURE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Lightning_Rod_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Lightning_Rod_(ability) | Source} */ LIGHTNING_ROD, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Serene_Grace_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Serene_Grace_(ability) | Source} */ SERENE_GRACE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Swift_Swim_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Swift_Swim_(ability) | Source} */ SWIFT_SWIM, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Chlorophyll_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Chlorophyll_(ability) | Source} */ CHLOROPHYLL, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Illuminate_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Illuminate_(ability) | Source} */ ILLUMINATE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Trace_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Trace_(ability) | Source} */ TRACE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Huge_Power_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Huge_Power_(ability) | Source} */ HUGE_POWER, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Poison_Point_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Poison_Point_(ability) | Source} */ POISON_POINT, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Inner_Focus_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Inner_Focus_(ability) | Source} */ INNER_FOCUS, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Magma_Armor_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Magma_Armor_(ability) | Source} */ MAGMA_ARMOR, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Water_Veil_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Water_Veil_(ability) | Source} */ WATER_VEIL, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Magnet_Pull_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Magnet_Pull_(ability) | Source} */ MAGNET_PULL, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Soundproof_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Soundproof_(ability) | Source} */ SOUNDPROOF, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Rain_Dish_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Rain_Dish_(ability) | Source} */ RAIN_DISH, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Sand_Stream_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Sand_Stream_(ability) | Source} */ SAND_STREAM, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Pressure_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Pressure_(ability) | Source} */ PRESSURE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Thick_Fat_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Thick_Fat_(ability) | Source} */ THICK_FAT, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Early_Bird_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Early_Bird_(ability) | Source} */ EARLY_BIRD, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Flame_Body_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Flame_Body_(ability) | Source} */ FLAME_BODY, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Run_Away_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Run_Away_(ability) | Source} */ RUN_AWAY, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Keen_Eye_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Keen_Eye_(ability) | Source} */ KEEN_EYE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Hyper_Cutter_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Hyper_Cutter_(ability) | Source} */ HYPER_CUTTER, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Pickup_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Pickup_(ability) | Source} */ PICKUP, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Truant_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Truant_(ability) | Source} */ TRUANT, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Hustle_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Hustle_(ability) | Source} */ HUSTLE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Cute_Charm_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Cute_Charm_(ability) | Source} */ CUTE_CHARM, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Plus_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Plus_(ability) | Source} */ PLUS, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Minus_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Minus_(ability) | Source} */ MINUS, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Forecast_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Forecast_(ability) | Source} */ FORECAST, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Sticky_Hold_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Sticky_Hold_(ability) | Source} */ STICKY_HOLD, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Shed_Skin_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Shed_Skin_(ability) | Source} */ SHED_SKIN, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Guts_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Guts_(ability) | Source} */ GUTS, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Marvel_Scale_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Marvel_Scale_(ability) | Source} */ MARVEL_SCALE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Liquid_Ooze_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Liquid_Ooze_(ability) | Source} */ LIQUID_OOZE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Overgrow_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Overgrow_(ability) | Source} */ OVERGROW, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Blaze_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Blaze_(ability) | Source} */ BLAZE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Torrent_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Torrent_(ability) | Source} */ TORRENT, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Swarm_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Swarm_(ability) | Source} */ SWARM, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Rock_Head_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Rock_Head_(ability) | Source} */ ROCK_HEAD, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Drought_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Drought_(ability) | Source} */ DROUGHT, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Arena_Trap_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Arena_Trap_(ability) | Source} */ ARENA_TRAP, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Vital_Spirit_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Vital_Spirit_(ability) | Source} */ VITAL_SPIRIT, - /**{@link https://bulbapedia.bulbagarden.net/wiki/White_Smoke_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/White_Smoke_(ability) | Source} */ WHITE_SMOKE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Pure_Power_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Pure_Power_(ability) | Source} */ PURE_POWER, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Shell_Armor_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Shell_Armor_(ability) | Source} */ SHELL_ARMOR, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Air_Lock_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Air_Lock_(ability) | Source} */ AIR_LOCK, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Tangled_Feet_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Tangled_Feet_(ability) | Source} */ TANGLED_FEET, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Motor_Drive_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Motor_Drive_(ability) | Source} */ MOTOR_DRIVE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Rivalry_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Rivalry_(ability) | Source} */ RIVALRY, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Steadfast_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Steadfast_(ability) | Source} */ STEADFAST, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Snow_Cloak_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Snow_Cloak_(ability) | Source} */ SNOW_CLOAK, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Gluttony_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Gluttony_(ability) | Source} */ GLUTTONY, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Anger_Point_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Anger_Point_(ability) | Source} */ ANGER_POINT, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Unburden_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Unburden_(ability) | Source} */ UNBURDEN, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Heatproof_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Heatproof_(ability) | Source} */ HEATPROOF, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Simple_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Simple_(ability) | Source} */ SIMPLE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Dry_Skin_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Dry_Skin_(ability) | Source} */ DRY_SKIN, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Download_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Download_(ability) | Source} */ DOWNLOAD, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Iron_Fist_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Iron_Fist_(ability) | Source} */ IRON_FIST, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Poison_Heal_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Poison_Heal_(ability) | Source} */ POISON_HEAL, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Adaptability_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Adaptability_(ability) | Source} */ ADAPTABILITY, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Skill_Link_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Skill_Link_(ability) | Source} */ SKILL_LINK, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Hydration_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Hydration_(ability) | Source} */ HYDRATION, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Solar_Power_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Solar_Power_(ability) | Source} */ SOLAR_POWER, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Quick_Feet_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Quick_Feet_(ability) | Source} */ QUICK_FEET, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Normalize_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Normalize_(ability) | Source} */ NORMALIZE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Sniper_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Sniper_(ability) | Source} */ SNIPER, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Magic_Guard_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Magic_Guard_(ability) | Source} */ MAGIC_GUARD, - /**{@link https://bulbapedia.bulbagarden.net/wiki/No_Guard_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/No_Guard_(ability) | Source} */ NO_GUARD, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Stall_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Stall_(ability) | Source} */ STALL, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Technician_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Technician_(ability) | Source} */ TECHNICIAN, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Leaf_Guard_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Leaf_Guard_(ability) | Source} */ LEAF_GUARD, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Klutz_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Klutz_(ability) | Source} */ KLUTZ, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Mold_Breaker_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Mold_Breaker_(ability) | Source} */ MOLD_BREAKER, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Super_Luck_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Super_Luck_(ability) | Source} */ SUPER_LUCK, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Aftermath_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Aftermath_(ability) | Source} */ AFTERMATH, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Anticipation_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Anticipation_(ability) | Source} */ ANTICIPATION, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Forewarn_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Forewarn_(ability) | Source} */ FOREWARN, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Unaware_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Unaware_(ability) | Source} */ UNAWARE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Tinted_Lens_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Tinted_Lens_(ability) | Source} */ TINTED_LENS, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Filter_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Filter_(ability) | Source} */ FILTER, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Slow_Start_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Slow_Start_(ability) | Source} */ SLOW_START, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Scrappy_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Scrappy_(ability) | Source} */ SCRAPPY, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Storm_Drain_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Storm_Drain_(ability) | Source} */ STORM_DRAIN, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Ice_Body_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Ice_Body_(ability) | Source} */ ICE_BODY, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Solid_Rock_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Solid_Rock_(ability) | Source} */ SOLID_ROCK, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Snow_Warning_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Snow_Warning_(ability) | Source} */ SNOW_WARNING, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Honey_Gather_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Honey_Gather_(ability) | Source} */ HONEY_GATHER, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Frisk_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Frisk_(ability) | Source} */ FRISK, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Reckless_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Reckless_(ability) | Source} */ RECKLESS, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Multitype_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Multitype_(ability) | Source} */ MULTITYPE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Flower_Gift_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Flower_Gift_(ability) | Source} */ FLOWER_GIFT, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Bad_Dreams_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Bad_Dreams_(ability) | Source} */ BAD_DREAMS, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Pickpocket_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Pickpocket_(ability) | Source} */ PICKPOCKET, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Sheer_Force_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Sheer_Force_(ability) | Source} */ SHEER_FORCE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Contrary_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Contrary_(ability) | Source} */ CONTRARY, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Unnerve_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Unnerve_(ability) | Source} */ UNNERVE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Defiant_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Defiant_(ability) | Source} */ DEFIANT, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Defeatist_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Defeatist_(ability) | Source} */ DEFEATIST, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Cursed_Body_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Cursed_Body_(ability) | Source} */ CURSED_BODY, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Healer_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Healer_(ability) | Source} */ HEALER, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Friend_Guard_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Friend_Guard_(ability) | Source} */ FRIEND_GUARD, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Weak_Armor_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Weak_Armor_(ability) | Source} */ WEAK_ARMOR, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Heavy_Metal_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Heavy_Metal_(ability) | Source} */ HEAVY_METAL, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Light_Metal_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Light_Metal_(ability) | Source} */ LIGHT_METAL, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Multiscale_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Multiscale_(ability) | Source} */ MULTISCALE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Toxic_Boost_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Toxic_Boost_(ability) | Source} */ TOXIC_BOOST, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Flare_Boost_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Flare_Boost_(ability) | Source} */ FLARE_BOOST, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Harvest_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Harvest_(ability) | Source} */ HARVEST, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Telepathy_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Telepathy_(ability) | Source} */ TELEPATHY, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Moody_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Moody_(ability) | Source} */ MOODY, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Overcoat_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Overcoat_(ability) | Source} */ OVERCOAT, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Poison_Touch_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Poison_Touch_(ability) | Source} */ POISON_TOUCH, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Regenerator_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Regenerator_(ability) | Source} */ REGENERATOR, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Big_Pecks_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Big_Pecks_(ability) | Source} */ BIG_PECKS, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Sand_Rush_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Sand_Rush_(ability) | Source} */ SAND_RUSH, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Wonder_Skin_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Wonder_Skin_(ability) | Source} */ WONDER_SKIN, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Analytic_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Analytic_(ability) | Source} */ ANALYTIC, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Illusion_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Illusion_(ability) | Source} */ ILLUSION, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Imposter_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Imposter_(ability) | Source} */ IMPOSTER, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Infiltrator_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Infiltrator_(ability) | Source} */ INFILTRATOR, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Mummy_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Mummy_(ability) | Source} */ MUMMY, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Moxie_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Moxie_(ability) | Source} */ MOXIE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Justified_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Justified_(ability) | Source} */ JUSTIFIED, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Rattled_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Rattled_(ability) | Source} */ RATTLED, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Magic_Bounce_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Magic_Bounce_(ability) | Source} */ MAGIC_BOUNCE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Sap_Sipper_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Sap_Sipper_(ability) | Source} */ SAP_SIPPER, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Prankster_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Prankster_(ability) | Source} */ PRANKSTER, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Sand_Force_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Sand_Force_(ability) | Source} */ SAND_FORCE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Iron_Barbs_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Iron_Barbs_(ability) | Source} */ IRON_BARBS, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Zen_Mode_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Zen_Mode_(ability) | Source} */ ZEN_MODE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Victory_Star_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Victory_Star_(ability) | Source} */ VICTORY_STAR, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Turboblaze_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Turboblaze_(ability) | Source} */ TURBOBLAZE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Teravolt_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Teravolt_(ability) | Source} */ TERAVOLT, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Aroma_Veil_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Aroma_Veil_(ability) | Source} */ AROMA_VEIL, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Flower_Veil_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Flower_Veil_(ability) | Source} */ FLOWER_VEIL, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Cheek_Pouch_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Cheek_Pouch_(ability) | Source} */ CHEEK_POUCH, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Protean_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Protean_(ability) | Source} */ PROTEAN, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Fur_Coat_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Fur_Coat_(ability) | Source} */ FUR_COAT, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Magician_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Magician_(ability) | Source} */ MAGICIAN, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Bulletproof_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Bulletproof_(ability) | Source} */ BULLETPROOF, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Competitive_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Competitive_(ability) | Source} */ COMPETITIVE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Strong_Jaw_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Strong_Jaw_(ability) | Source} */ STRONG_JAW, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Refrigerate_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Refrigerate_(ability) | Source} */ REFRIGERATE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Sweet_Veil_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Sweet_Veil_(ability) | Source} */ SWEET_VEIL, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Stance_Change_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Stance_Change_(ability) | Source} */ STANCE_CHANGE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Gale_Wings_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Gale_Wings_(ability) | Source} */ GALE_WINGS, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Mega_Launcher_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Mega_Launcher_(ability) | Source} */ MEGA_LAUNCHER, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Grass_Pelt_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Grass_Pelt_(ability) | Source} */ GRASS_PELT, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Symbiosis_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Symbiosis_(ability) | Source} */ SYMBIOSIS, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Tough_Claws_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Tough_Claws_(ability) | Source} */ TOUGH_CLAWS, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Pixilate_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Pixilate_(ability) | Source} */ PIXILATE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Gooey_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Gooey_(ability) | Source} */ GOOEY, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Aerilate_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Aerilate_(ability) | Source} */ AERILATE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Parental_Bond_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Parental_Bond_(ability) | Source} */ PARENTAL_BOND, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Dark_Aura_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Dark_Aura_(ability) | Source} */ DARK_AURA, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Fairy_Aura_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Fairy_Aura_(ability) | Source} */ FAIRY_AURA, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Aura_Break_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Aura_Break_(ability) | Source} */ AURA_BREAK, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Primordial_Sea_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Primordial_Sea_(ability) | Source} */ PRIMORDIAL_SEA, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Desolate_Land_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Desolate_Land_(ability) | Source} */ DESOLATE_LAND, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Delta_Stream_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Delta_Stream_(ability) | Source} */ DELTA_STREAM, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Stamina_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Stamina_(ability) | Source} */ STAMINA, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Wimp_Out_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Wimp_Out_(ability) | Source} */ WIMP_OUT, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Emergency_Exit_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Emergency_Exit_(ability) | Source} */ EMERGENCY_EXIT, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Water_Compaction_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Water_Compaction_(ability) | Source} */ WATER_COMPACTION, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Merciless_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Merciless_(ability) | Source} */ MERCILESS, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Shields_Down_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Shields_Down_(ability) | Source} */ SHIELDS_DOWN, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Stakeout_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Stakeout_(ability) | Source} */ STAKEOUT, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Water_Bubble_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Water_Bubble_(ability) | Source} */ WATER_BUBBLE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Steelworker_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Steelworker_(ability) | Source} */ STEELWORKER, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Berserk_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Berserk_(ability) | Source} */ BERSERK, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Slush_Rush_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Slush_Rush_(ability) | Source} */ SLUSH_RUSH, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Long_Reach_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Long_Reach_(ability) | Source} */ LONG_REACH, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Liquid_Voice_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Liquid_Voice_(ability) | Source} */ LIQUID_VOICE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Triage_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Triage_(ability) | Source} */ TRIAGE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Galvanize_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Galvanize_(ability) | Source} */ GALVANIZE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Surge_Surfer_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Surge_Surfer_(ability) | Source} */ SURGE_SURFER, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Schooling_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Schooling_(ability) | Source} */ SCHOOLING, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Disguise_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Disguise_(ability) | Source} */ DISGUISE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Battle_Bond_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Battle_Bond_(ability) | Source} */ BATTLE_BOND, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Power_Construct_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Power_Construct_(ability) | Source} */ POWER_CONSTRUCT, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Corrosion_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Corrosion_(ability) | Source} */ CORROSION, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Comatose_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Comatose_(ability) | Source} */ COMATOSE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Queenly_Majesty_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Queenly_Majesty_(ability) | Source} */ QUEENLY_MAJESTY, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Innards_Out_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Innards_Out_(ability) | Source} */ INNARDS_OUT, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Dancer_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Dancer_(ability) | Source} */ DANCER, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Battery_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Battery_(ability) | Source} */ BATTERY, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Fluffy_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Fluffy_(ability) | Source} */ FLUFFY, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Dazzling_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Dazzling_(ability) | Source} */ DAZZLING, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Soul_Heart_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Soul_Heart_(ability) | Source} */ SOUL_HEART, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Tangling_Hair_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Tangling_Hair_(ability) | Source} */ TANGLING_HAIR, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Receiver_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Receiver_(ability) | Source} */ RECEIVER, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Power_Of_Alchemy_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Power_Of_Alchemy_(ability) | Source} */ POWER_OF_ALCHEMY, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Beast_Boost_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Beast_Boost_(ability) | Source} */ BEAST_BOOST, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Rks_System_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Rks_System_(ability) | Source} */ RKS_SYSTEM, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Electric_Surge_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Electric_Surge_(ability) | Source} */ ELECTRIC_SURGE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Psychic_Surge_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Psychic_Surge_(ability) | Source} */ PSYCHIC_SURGE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Misty_Surge_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Misty_Surge_(ability) | Source} */ MISTY_SURGE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Grassy_Surge_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Grassy_Surge_(ability) | Source} */ GRASSY_SURGE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Full_Metal_Body_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Full_Metal_Body_(ability) | Source} */ FULL_METAL_BODY, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Shadow_Shield_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Shadow_Shield_(ability) | Source} */ SHADOW_SHIELD, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Prism_Armor_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Prism_Armor_(ability) | Source} */ PRISM_ARMOR, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Neuroforce_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Neuroforce_(ability) | Source} */ NEUROFORCE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Intrepid_Sword_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Intrepid_Sword_(ability) | Source} */ INTREPID_SWORD, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Dauntless_Shield_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Dauntless_Shield_(ability) | Source} */ DAUNTLESS_SHIELD, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Libero_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Libero_(ability) | Source} */ LIBERO, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Ball_Fetch_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Ball_Fetch_(ability) | Source} */ BALL_FETCH, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Cotton_Down_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Cotton_Down_(ability) | Source} */ COTTON_DOWN, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Propeller_Tail_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Propeller_Tail_(ability) | Source} */ PROPELLER_TAIL, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Mirror_Armor_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Mirror_Armor_(ability) | Source} */ MIRROR_ARMOR, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Gulp_Missile_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Gulp_Missile_(ability) | Source} */ GULP_MISSILE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Stalwart_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Stalwart_(ability) | Source} */ STALWART, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Steam_Engine_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Steam_Engine_(ability) | Source} */ STEAM_ENGINE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Punk_Rock_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Punk_Rock_(ability) | Source} */ PUNK_ROCK, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Sand_Spit_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Sand_Spit_(ability) | Source} */ SAND_SPIT, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Ice_Scales_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Ice_Scales_(ability) | Source} */ ICE_SCALES, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Ripen_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Ripen_(ability) | Source} */ RIPEN, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Ice_Face_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Ice_Face_(ability) | Source} */ ICE_FACE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Power_Spot_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Power_Spot_(ability) | Source} */ POWER_SPOT, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Mimicry_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Mimicry_(ability) | Source} */ MIMICRY, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Screen_Cleaner_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Screen_Cleaner_(ability) | Source} */ SCREEN_CLEANER, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Steely_Spirit_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Steely_Spirit_(ability) | Source} */ STEELY_SPIRIT, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Perish_Body_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Perish_Body_(ability) | Source} */ PERISH_BODY, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Wandering_Spirit_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Wandering_Spirit_(ability) | Source} */ WANDERING_SPIRIT, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Gorilla_Tactics_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Gorilla_Tactics_(ability) | Source} */ GORILLA_TACTICS, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Neutralizing_Gas_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Neutralizing_Gas_(ability) | Source} */ NEUTRALIZING_GAS, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Pastel_Veil_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Pastel_Veil_(ability) | Source} */ PASTEL_VEIL, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Hunger_Switch_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Hunger_Switch_(ability) | Source} */ HUNGER_SWITCH, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Quick_Draw_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Quick_Draw_(ability) | Source} */ QUICK_DRAW, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Unseen_Fist_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Unseen_Fist_(ability) | Source} */ UNSEEN_FIST, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Curious_Medicine_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Curious_Medicine_(ability) | Source} */ CURIOUS_MEDICINE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Transistor_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Transistor_(ability) | Source} */ TRANSISTOR, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Dragons_Maw_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Dragons_Maw_(ability) | Source} */ DRAGONS_MAW, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Chilling_Neigh_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Chilling_Neigh_(ability) | Source} */ CHILLING_NEIGH, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Grim_Neigh_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Grim_Neigh_(ability) | Source} */ GRIM_NEIGH, - /**{@link https://bulbapedia.bulbagarden.net/wiki/As_One_Glastrier_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/As_One_Glastrier_(ability) | Source} */ AS_ONE_GLASTRIER, - /**{@link https://bulbapedia.bulbagarden.net/wiki/As_One_Spectrier_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/As_One_Spectrier_(ability) | Source} */ AS_ONE_SPECTRIER, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Lingering_Aroma_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Lingering_Aroma_(ability) | Source} */ LINGERING_AROMA, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Seed_Sower_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Seed_Sower_(ability) | Source} */ SEED_SOWER, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Thermal_Exchange_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Thermal_Exchange_(ability) | Source} */ THERMAL_EXCHANGE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Anger_Shell_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Anger_Shell_(ability) | Source} */ ANGER_SHELL, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Purifying_Salt_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Purifying_Salt_(ability) | Source} */ PURIFYING_SALT, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Well_Baked_Body_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Well_Baked_Body_(ability) | Source} */ WELL_BAKED_BODY, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Wind_Rider_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Wind_Rider_(ability) | Source} */ WIND_RIDER, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Guard_Dog_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Guard_Dog_(ability) | Source} */ GUARD_DOG, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Rocky_Payload_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Rocky_Payload_(ability) | Source} */ ROCKY_PAYLOAD, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Wind_Power_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Wind_Power_(ability) | Source} */ WIND_POWER, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Zero_To_Hero_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Zero_To_Hero_(ability) | Source} */ ZERO_TO_HERO, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Commander_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Commander_(ability) | Source} */ COMMANDER, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Electromorphosis_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Electromorphosis_(ability) | Source} */ ELECTROMORPHOSIS, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Protosynthesis_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Protosynthesis_(ability) | Source} */ PROTOSYNTHESIS, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Quark_Drive_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Quark_Drive_(ability) | Source} */ QUARK_DRIVE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Good_As_Gold_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Good_As_Gold_(ability) | Source} */ GOOD_AS_GOLD, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Vessel_Of_Ruin_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Vessel_Of_Ruin_(ability) | Source} */ VESSEL_OF_RUIN, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Sword_Of_Ruin_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Sword_Of_Ruin_(ability) | Source} */ SWORD_OF_RUIN, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Tablets_Of_Ruin_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Tablets_Of_Ruin_(ability) | Source} */ TABLETS_OF_RUIN, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Beads_Of_Ruin_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Beads_Of_Ruin_(ability) | Source} */ BEADS_OF_RUIN, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Orichalcum_Pulse_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Orichalcum_Pulse_(ability) | Source} */ ORICHALCUM_PULSE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Hadron_Engine_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Hadron_Engine_(ability) | Source} */ HADRON_ENGINE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Opportunist_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Opportunist_(ability) | Source} */ OPPORTUNIST, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Cud_Chew_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Cud_Chew_(ability) | Source} */ CUD_CHEW, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Sharpness_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Sharpness_(ability) | Source} */ SHARPNESS, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Supreme_Overlord_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Supreme_Overlord_(ability) | Source} */ SUPREME_OVERLORD, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Costar_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Costar_(ability) | Source} */ COSTAR, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Toxic_Debris_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Toxic_Debris_(ability) | Source} */ TOXIC_DEBRIS, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Armor_Tail_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Armor_Tail_(ability) | Source} */ ARMOR_TAIL, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Earth_Eater_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Earth_Eater_(ability) | Source} */ EARTH_EATER, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Mycelium_Might_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Mycelium_Might_(ability) | Source} */ MYCELIUM_MIGHT, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Minds_Eye_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Minds_Eye_(ability) | Source} */ MINDS_EYE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Supersweet_Syrup_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Supersweet_Syrup_(ability) | Source} */ SUPERSWEET_SYRUP, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Hospitality_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Hospitality_(ability) | Source} */ HOSPITALITY, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Toxic_Chain_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Toxic_Chain_(ability) | Source} */ TOXIC_CHAIN, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Embody_Aspect_Teal_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Embody_Aspect_Teal_(ability) | Source} */ EMBODY_ASPECT_TEAL, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Embody_Aspect_Wellspring_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Embody_Aspect_Wellspring_(ability) | Source} */ EMBODY_ASPECT_WELLSPRING, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Embody_Aspect_Hearthflame_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Embody_Aspect_Hearthflame_(ability) | Source} */ EMBODY_ASPECT_HEARTHFLAME, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Embody_Aspect_Cornerstone_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Embody_Aspect_Cornerstone_(ability) | Source} */ EMBODY_ASPECT_CORNERSTONE, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Tera_Shift_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Tera_Shift_(ability) | Source} */ TERA_SHIFT, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Tera_Shell_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Tera_Shell_(ability) | Source} */ TERA_SHELL, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Teraform_Zero_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Teraform_Zero_(ability) | Source} */ TERAFORM_ZERO, - /**{@link https://bulbapedia.bulbagarden.net/wiki/Poison_Puppeteer_(ability) | Source} */ + /** {@link https://bulbapedia.bulbagarden.net/wiki/Poison_Puppeteer_(ability) | Source} */ POISON_PUPPETEER, } diff --git a/src/enums/challenge-type.ts b/src/enums/challenge-type.ts index d9b1fce3e6e..053bcf92011 100644 --- a/src/enums/challenge-type.ts +++ b/src/enums/challenge-type.ts @@ -65,5 +65,45 @@ export enum ChallengeType { /** * Modifies what the pokemon stats for Flip Stat Mode. */ - FLIP_STAT + FLIP_STAT, + /** + * Challenges which conditionally enable or disable automatic party healing during biome transitions + * @see {@linkcode Challenge.applyPartyHealAvailability} + */ + PARTY_HEAL, + /** + * Challenges which conditionally enable or disable the shop + * @see {@linkcode Challenge.applyShopAvailability} + */ + SHOP, + /** + * Challenges which validate whether a pokemon can be added to the player's party or not + * @see {@linkcode Challenge.applyCatchAvailability} + */ + POKEMON_ADD_TO_PARTY, + /** + * Challenges which validate whether a pokemon is allowed to fuse or not + * @see {@linkcode Challenge.applyFusionAvailability} + */ + POKEMON_FUSION, + /** + * Challenges which validate whether particular moves can or cannot be used + * @see {@linkcode Challenge.applyMoveAvailability} + */ + POKEMON_MOVE, + /** + * Challenges which validate whether particular items are or are not sold in the shop + * @see {@linkcode Challenge.applyShopItems} + */ + SHOP_ITEM, + /** + * Challenges which validate whether particular items will be given as a reward after a wave + * @see {@linkcode Challenge.applyWaveRewards} + */ + WAVE_REWARD, + /** + * Challenges which prevent recovery from fainting + * @see {@linkcode Challenge.applyPermanentFaint} + */ + PREVENT_REVIVE, } diff --git a/src/enums/challenges.ts b/src/enums/challenges.ts index 7b506a61a2f..8d4f4c7a22a 100644 --- a/src/enums/challenges.ts +++ b/src/enums/challenges.ts @@ -6,4 +6,7 @@ export enum Challenges { FRESH_START, INVERSE_BATTLE, FLIP_STAT, + LIMITED_CATCH, + LIMITED_SUPPORT, + HARDCORE, } diff --git a/src/enums/ui-mode.ts b/src/enums/ui-mode.ts index dcf6bd2a238..75c07a5f63c 100644 --- a/src/enums/ui-mode.ts +++ b/src/enums/ui-mode.ts @@ -38,10 +38,12 @@ export enum UiMode { UNAVAILABLE, CHALLENGE_SELECT, RENAME_POKEMON, + RENAME_RUN, RUN_HISTORY, RUN_INFO, 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..2ce347b5337 100644 --- a/src/field/arena.ts +++ b/src/field/arena.ts @@ -54,7 +54,7 @@ export class Arena { public bgm: string; public ignoreAbilities: boolean; public ignoringEffectSource: BattlerIndex | null; - public playerTerasUsed: number; + public playerTerasUsed = 0; /** * Saves the number of times a party pokemon faints during a arena encounter. * {@linkcode globalScene.currentBattle.enemyFaints} is the corresponding faint counter for the enemy (this resets every wave). @@ -68,12 +68,11 @@ export class Arena { public readonly eventTarget: EventTarget = new EventTarget(); - constructor(biome: BiomeId, bgm: string, playerFaints = 0) { + constructor(biome: BiomeId, playerFaints = 0) { this.biomeType = biome; - this.bgm = bgm; + this.bgm = BiomeId[biome].toLowerCase(); this.trainerPool = biomeTrainerPools[biome]; this.updatePoolsForTimeOfDay(); - this.playerTerasUsed = 0; this.playerFaints = playerFaints; } @@ -145,7 +144,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--; } @@ -536,6 +535,7 @@ export class Arena { case BiomeId.ABYSS: case BiomeId.SPACE: case BiomeId.TEMPLE: + case BiomeId.LABORATORY: return 16; default: return 0; @@ -894,7 +894,7 @@ export class Arena { case BiomeId.CAVE: return 14.24; case BiomeId.DESERT: - return 1.143; + return 9.02; case BiomeId.ICE_CAVE: return 0.0; case BiomeId.MEADOW: @@ -922,7 +922,7 @@ export class Arena { case BiomeId.JUNGLE: return 0.0; case BiomeId.FAIRY_CAVE: - return 4.542; + return 0.0; case BiomeId.TEMPLE: return 2.547; case BiomeId.ISLAND: diff --git a/src/field/damage-number-handler.ts b/src/field/damage-number-handler.ts index 1bbacc19566..112b08631b0 100644 --- a/src/field/damage-number-handler.ts +++ b/src/field/damage-number-handler.ts @@ -30,7 +30,7 @@ export class DamageNumberHandler { const baseScale = target.getSpriteScale() / 6; const damageNumber = addTextObject( target.x, - -(globalScene.game.canvas.height / 6) + target.y - target.getSprite().height / 2, + -globalScene.scaledCanvas.height + target.y - target.getSprite().height / 2, formatStat(amount, true), TextStyle.SUMMARY, ); diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index d4f332d887c..3a5d435fb36 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -1,7 +1,7 @@ import type { Ability, PreAttackModifyDamageAbAttrParams } from "#abilities/ability"; import { applyAbAttrs, applyOnGainAbAttrs, applyOnLoseAbAttrs } from "#abilities/apply-ab-attrs"; import type { AnySound, BattleScene } from "#app/battle-scene"; -import { PLAYER_PARTY_MAX_SIZE } from "#app/constants"; +import { PLAYER_PARTY_MAX_SIZE, RARE_CANDY_FRIENDSHIP_CAP } from "#app/constants"; import { timedEventManager } from "#app/global-event-manager"; import { globalScene } from "#app/global-scene"; import { getPokemonNameWithAffix } from "#app/messages"; @@ -39,7 +39,7 @@ import { TrappedTag, TypeImmuneTag, } from "#data/battler-tags"; -import { applyChallenges } from "#data/challenge"; +import { getDailyEventSeedBoss } from "#data/daily-run"; import { allAbilities, allMoves } from "#data/data-lists"; import { getLevelTotalExp } from "#data/exp"; import { @@ -139,6 +139,8 @@ import { populateVariantColors, variantColorCache, variantData } from "#sprites/ import { achvs } from "#system/achv"; import type { StarterDataEntry, StarterMoveset } from "#system/game-data"; import type { PokemonData } from "#system/pokemon-data"; +import { RibbonData } from "#system/ribbons/ribbon-data"; +import { awardRibbonsToSpeciesLine } from "#system/ribbons/ribbon-methods"; import type { AbAttrMap, AbAttrString, TypeMultiplierAbAttrParams } from "#types/ability-types"; import type { DamageCalculationResult, DamageResult } from "#types/damage-result"; import type { IllusionData } from "#types/illusion-data"; @@ -148,6 +150,7 @@ import { EnemyBattleInfo } from "#ui/enemy-battle-info"; import type { PartyOption } from "#ui/party-ui-handler"; import { PartyUiHandler, PartyUiMode } from "#ui/party-ui-handler"; import { PlayerBattleInfo } from "#ui/player-battle-info"; +import { applyChallenges } from "#utils/challenge-utils"; import { BooleanHolder, type Constructor, @@ -1824,7 +1827,7 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { // Overrides moveset based on arrays specified in overrides.ts let overrideArray: MoveId | Array = this.isPlayer() ? Overrides.MOVESET_OVERRIDE - : Overrides.OPP_MOVESET_OVERRIDE; + : Overrides.ENEMY_MOVESET_OVERRIDE; overrideArray = coerceArray(overrideArray); if (overrideArray.length > 0) { if (!this.isPlayer()) { @@ -2029,8 +2032,8 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { if (Overrides.ABILITY_OVERRIDE && this.isPlayer()) { return allAbilities[Overrides.ABILITY_OVERRIDE]; } - if (Overrides.OPP_ABILITY_OVERRIDE && this.isEnemy()) { - return allAbilities[Overrides.OPP_ABILITY_OVERRIDE]; + if (Overrides.ENEMY_ABILITY_OVERRIDE && this.isEnemy()) { + return allAbilities[Overrides.ENEMY_ABILITY_OVERRIDE]; } if (this.isFusion()) { if (!isNullOrUndefined(this.fusionCustomPokemonData?.ability) && this.fusionCustomPokemonData.ability !== -1) { @@ -2059,8 +2062,8 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { if (Overrides.PASSIVE_ABILITY_OVERRIDE && this.isPlayer()) { return allAbilities[Overrides.PASSIVE_ABILITY_OVERRIDE]; } - if (Overrides.OPP_PASSIVE_ABILITY_OVERRIDE && this.isEnemy()) { - return allAbilities[Overrides.OPP_PASSIVE_ABILITY_OVERRIDE]; + if (Overrides.ENEMY_PASSIVE_ABILITY_OVERRIDE && this.isEnemy()) { + return allAbilities[Overrides.ENEMY_PASSIVE_ABILITY_OVERRIDE]; } if (!isNullOrUndefined(this.customPokemonData.passive) && this.customPokemonData.passive !== -1) { return allAbilities[this.customPokemonData.passive]; @@ -2127,14 +2130,14 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { // returns override if valid for current case if ( (Overrides.HAS_PASSIVE_ABILITY_OVERRIDE === false && this.isPlayer()) || - (Overrides.OPP_HAS_PASSIVE_ABILITY_OVERRIDE === false && this.isEnemy()) + (Overrides.ENEMY_HAS_PASSIVE_ABILITY_OVERRIDE === false && this.isEnemy()) ) { return false; } if ( ((Overrides.PASSIVE_ABILITY_OVERRIDE !== AbilityId.NONE || Overrides.HAS_PASSIVE_ABILITY_OVERRIDE) && this.isPlayer()) || - ((Overrides.OPP_PASSIVE_ABILITY_OVERRIDE !== AbilityId.NONE || Overrides.OPP_HAS_PASSIVE_ABILITY_OVERRIDE) && + ((Overrides.ENEMY_PASSIVE_ABILITY_OVERRIDE !== AbilityId.NONE || Overrides.ENEMY_HAS_PASSIVE_ABILITY_OVERRIDE) && this.isEnemy()) ) { return true; @@ -3000,8 +3003,8 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { if (forStarter && this.isPlayer() && Overrides.STARTER_FUSION_SPECIES_OVERRIDE) { fusionOverride = getPokemonSpecies(Overrides.STARTER_FUSION_SPECIES_OVERRIDE); - } else if (this.isEnemy() && Overrides.OPP_FUSION_SPECIES_OVERRIDE) { - fusionOverride = getPokemonSpecies(Overrides.OPP_FUSION_SPECIES_OVERRIDE); + } else if (this.isEnemy() && Overrides.ENEMY_FUSION_SPECIES_OVERRIDE) { + fusionOverride = getPokemonSpecies(Overrides.ENEMY_FUSION_SPECIES_OVERRIDE); } this.fusionSpecies = @@ -4045,7 +4048,7 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { * @param damage integer * @param ignoreSegments boolean, not currently used * @param preventEndure used to update damage if endure or sturdy - * @param ignoreFaintPhas flag on whether to add FaintPhase if pokemon after applying damage faints + * @param ignoreFaintPhase flag on whether to add FaintPhase if pokemon after applying damage faints * @returns integer representing damage dealt */ damage(damage: number, _ignoreSegments = false, preventEndure = false, ignoreFaintPhase = false): number { @@ -4558,8 +4561,17 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { } const key = this.species.getCryKey(this.formIndex); - let rate = 0.85; - const cry = globalScene.playSound(key, { rate: rate }) as AnySound; + const crySoundConfig = { rate: 0.85, detune: 0 }; + if (this.isPlayer()) { + // If fainting is permanent, emphasize impact + const preventRevive = new BooleanHolder(false); + applyChallenges(ChallengeType.PREVENT_REVIVE, preventRevive); + if (preventRevive.value) { + crySoundConfig.detune = -100; + crySoundConfig.rate = 0.7; + } + } + const cry = globalScene.playSound(key, crySoundConfig) as AnySound; if (!cry || globalScene.fieldVolume === 0) { callback(); return; @@ -4578,7 +4590,7 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { delay: fixedInt(delay), repeat: -1, callback: () => { - frameThreshold = sprite.anims.msPerFrame / rate; + frameThreshold = sprite.anims.msPerFrame / crySoundConfig.rate; frameProgress += delay; while (frameProgress > frameThreshold) { if (sprite.anims.duration) { @@ -4588,8 +4600,7 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { frameProgress -= frameThreshold; } if (cry && !cry.pendingRemove) { - rate *= 0.99; - cry.setRate(rate); + cry.setRate(crySoundConfig.rate * 0.99); } else { faintCryTimer?.destroy(); faintCryTimer = null; @@ -5198,38 +5209,38 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { } } - updateFusionPalette(ignoreOveride?: boolean): void { - if (!this.getFusionSpeciesForm(ignoreOveride)) { + updateFusionPalette(ignoreOverride?: boolean): void { + if (!this.getFusionSpeciesForm(ignoreOverride)) { [this.getSprite(), this.getTintSprite()] .filter(s => !!s) .map(s => { - s.pipelineData[`spriteColors${ignoreOveride && this.summonData.speciesForm ? "Base" : ""}`] = []; - s.pipelineData[`fusionSpriteColors${ignoreOveride && this.summonData.speciesForm ? "Base" : ""}`] = []; + s.pipelineData[`spriteColors${ignoreOverride && this.summonData.speciesForm ? "Base" : ""}`] = []; + s.pipelineData[`fusionSpriteColors${ignoreOverride && this.summonData.speciesForm ? "Base" : ""}`] = []; }); return; } - const speciesForm = this.getSpeciesForm(ignoreOveride); - const fusionSpeciesForm = this.getFusionSpeciesForm(ignoreOveride); + const speciesForm = this.getSpeciesForm(ignoreOverride); + const fusionSpeciesForm = this.getFusionSpeciesForm(ignoreOverride); const spriteKey = speciesForm.getSpriteKey( - this.getGender(ignoreOveride) === Gender.FEMALE, + this.getGender(ignoreOverride) === Gender.FEMALE, speciesForm.formIndex, this.shiny, this.variant, ); const backSpriteKey = speciesForm - .getSpriteKey(this.getGender(ignoreOveride) === Gender.FEMALE, speciesForm.formIndex, this.shiny, this.variant) + .getSpriteKey(this.getGender(ignoreOverride) === Gender.FEMALE, speciesForm.formIndex, this.shiny, this.variant) .replace("pkmn__", "pkmn__back__"); const fusionSpriteKey = fusionSpeciesForm.getSpriteKey( - this.getFusionGender(ignoreOveride) === Gender.FEMALE, + this.getFusionGender(ignoreOverride) === Gender.FEMALE, fusionSpeciesForm.formIndex, this.fusionShiny, this.fusionVariant, ); const fusionBackSpriteKey = fusionSpeciesForm .getSpriteKey( - this.getFusionGender(ignoreOveride) === Gender.FEMALE, + this.getFusionGender(ignoreOverride) === Gender.FEMALE, fusionSpeciesForm.formIndex, this.fusionShiny, this.fusionVariant, @@ -5514,8 +5525,8 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { [this.getSprite(), this.getTintSprite()] .filter(s => !!s) .map(s => { - s.pipelineData[`spriteColors${ignoreOveride && this.summonData.speciesForm ? "Base" : ""}`] = spriteColors; - s.pipelineData[`fusionSpriteColors${ignoreOveride && this.summonData.speciesForm ? "Base" : ""}`] = + s.pipelineData[`spriteColors${ignoreOverride && this.summonData.speciesForm ? "Base" : ""}`] = spriteColors; + s.pipelineData[`fusionSpriteColors${ignoreOverride && this.summonData.speciesForm ? "Base" : ""}`] = fusionSpriteColors; }); @@ -5813,45 +5824,59 @@ export class PlayerPokemon extends Pokemon { ); }); } - - addFriendship(friendship: number): void { - if (friendship > 0) { - const starterSpeciesId = this.species.getRootSpeciesId(); - const fusionStarterSpeciesId = this.isFusion() && this.fusionSpecies ? this.fusionSpecies.getRootSpeciesId() : 0; - const starterData = [ - globalScene.gameData.starterData[starterSpeciesId], - fusionStarterSpeciesId ? globalScene.gameData.starterData[fusionStarterSpeciesId] : null, - ].filter(d => !!d); - const amount = new NumberHolder(friendship); - globalScene.applyModifier(PokemonFriendshipBoosterModifier, true, this, amount); - const candyFriendshipMultiplier = globalScene.gameMode.isClassic - ? timedEventManager.getClassicFriendshipMultiplier() - : 1; - const fusionReduction = fusionStarterSpeciesId - ? timedEventManager.areFusionsBoosted() - ? 1.5 // Divide candy gain for fusions by 1.5 during events - : 2 // 2 for fusions outside events - : 1; // 1 for non-fused mons - const starterAmount = new NumberHolder(Math.floor((amount.value * candyFriendshipMultiplier) / fusionReduction)); - - // Add friendship to this PlayerPokemon - this.friendship = Math.min(this.friendship + amount.value, 255); - if (this.friendship === 255) { - globalScene.validateAchv(achvs.MAX_FRIENDSHIP); - } - // Add to candy progress for this mon's starter species and its fused species (if it has one) - starterData.forEach((sd: StarterDataEntry, i: number) => { - const speciesId = !i ? starterSpeciesId : (fusionStarterSpeciesId as SpeciesId); - sd.friendship = (sd.friendship || 0) + starterAmount.value; - if (sd.friendship >= getStarterValueFriendshipCap(speciesStarterCosts[speciesId])) { - globalScene.gameData.addStarterCandy(getPokemonSpecies(speciesId), 1); - sd.friendship = 0; - } - }); - } else { - // Lose friendship upon fainting + /** + * Add friendship to this Pokemon + * + * @remarks + * This adds friendship to the pokemon's friendship stat (used for evolution, return, etc.) and candy progress. + * For fusions, candy progress for each species in the fusion is halved. + * + * @param friendship - The amount of friendship to add. Negative values will reduce friendship, though not below 0. + * @param capped - If true, don't allow the friendship gain to exceed 200. Used to cap friendship gains from rare candies. + */ + addFriendship(friendship: number, capped = false): void { + // Short-circuit friendship loss, which doesn't impact candy friendship + if (friendship <= 0) { this.friendship = Math.max(this.friendship + friendship, 0); + return; } + + const starterSpeciesId = this.species.getRootSpeciesId(); + const fusionStarterSpeciesId = this.isFusion() && this.fusionSpecies ? this.fusionSpecies.getRootSpeciesId() : 0; + const starterGameData = globalScene.gameData.starterData; + const starterData: [StarterDataEntry, SpeciesId][] = [[starterGameData[starterSpeciesId], starterSpeciesId]]; + if (fusionStarterSpeciesId) { + starterData.push([starterGameData[fusionStarterSpeciesId], fusionStarterSpeciesId]); + } + const amount = new NumberHolder(friendship); + globalScene.applyModifier(PokemonFriendshipBoosterModifier, true, this, amount); + friendship = amount.value; + + const newFriendship = this.friendship + friendship; + // If capped is true, only adjust friendship if the new friendship is less than or equal to 200. + if (!capped || newFriendship <= RARE_CANDY_FRIENDSHIP_CAP) { + this.friendship = Math.min(newFriendship, 255); + if (newFriendship >= 255) { + globalScene.validateAchv(achvs.MAX_FRIENDSHIP); + awardRibbonsToSpeciesLine(this.species.speciesId, RibbonData.FRIENDSHIP); + } + } + + let candyFriendshipMultiplier = globalScene.gameMode.isClassic + ? timedEventManager.getClassicFriendshipMultiplier() + : 1; + if (fusionStarterSpeciesId) { + candyFriendshipMultiplier /= timedEventManager.areFusionsBoosted() ? 1.5 : 2; + } + const candyFriendshipAmount = Math.floor(friendship * candyFriendshipMultiplier); + // Add to candy progress for this mon's starter species and its fused species (if it has one) + starterData.forEach(([sd, id]: [StarterDataEntry, SpeciesId]) => { + sd.friendship = (sd.friendship || 0) + candyFriendshipAmount; + if (sd.friendship >= getStarterValueFriendshipCap(speciesStarterCosts[id])) { + globalScene.gameData.addStarterCandy(getPokemonSpecies(id), 1); + sd.friendship = 0; + } + }); } getPossibleEvolution(evolution: SpeciesFormEvolution | null): Promise { @@ -6232,41 +6257,46 @@ export class EnemyPokemon extends Pokemon { this.setBoss(boss, dataSource?.bossSegments); } - if (Overrides.OPP_STATUS_OVERRIDE) { - this.status = new Status(Overrides.OPP_STATUS_OVERRIDE, 0, 4); + if (Overrides.ENEMY_STATUS_OVERRIDE) { + this.status = new Status(Overrides.ENEMY_STATUS_OVERRIDE, 0, 4); } - if (Overrides.OPP_GENDER_OVERRIDE !== null) { - this.gender = Overrides.OPP_GENDER_OVERRIDE; + if (Overrides.ENEMY_GENDER_OVERRIDE !== null) { + this.gender = Overrides.ENEMY_GENDER_OVERRIDE; } const speciesId = this.species.speciesId; if ( - speciesId in Overrides.OPP_FORM_OVERRIDES && - !isNullOrUndefined(Overrides.OPP_FORM_OVERRIDES[speciesId]) && - this.species.forms[Overrides.OPP_FORM_OVERRIDES[speciesId]] + speciesId in Overrides.ENEMY_FORM_OVERRIDES && + !isNullOrUndefined(Overrides.ENEMY_FORM_OVERRIDES[speciesId]) && + this.species.forms[Overrides.ENEMY_FORM_OVERRIDES[speciesId]] ) { - this.formIndex = Overrides.OPP_FORM_OVERRIDES[speciesId]; + this.formIndex = Overrides.ENEMY_FORM_OVERRIDES[speciesId]; + } else if (globalScene.gameMode.isDaily && globalScene.gameMode.isWaveFinal(globalScene.currentBattle.waveIndex)) { + const eventBoss = getDailyEventSeedBoss(globalScene.seed); + if (!isNullOrUndefined(eventBoss)) { + this.formIndex = eventBoss.formIndex; + } } if (!dataSource) { this.generateAndPopulateMoveset(); - if (shinyLock || Overrides.OPP_SHINY_OVERRIDE === false) { + if (shinyLock || Overrides.ENEMY_SHINY_OVERRIDE === false) { this.shiny = false; } else { this.trySetShiny(); } - if (!this.shiny && Overrides.OPP_SHINY_OVERRIDE) { + if (!this.shiny && Overrides.ENEMY_SHINY_OVERRIDE) { this.shiny = true; this.initShinySparkle(); } if (this.shiny) { this.variant = this.generateShinyVariant(); - if (Overrides.OPP_VARIANT_OVERRIDE !== null) { - this.variant = Overrides.OPP_VARIANT_OVERRIDE; + if (Overrides.ENEMY_VARIANT_OVERRIDE !== null) { + this.variant = Overrides.ENEMY_VARIANT_OVERRIDE; } } diff --git a/src/game-mode.ts b/src/game-mode.ts index c5ab120e218..b44e786b3d9 100644 --- a/src/game-mode.ts +++ b/src/game-mode.ts @@ -2,9 +2,8 @@ import { FixedBattleConfig } from "#app/battle"; import { CHALLENGE_MODE_MYSTERY_ENCOUNTER_WAVES, CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { globalScene } from "#app/global-scene"; import Overrides from "#app/overrides"; -import type { Challenge } from "#data/challenge"; -import { allChallenges, applyChallenges, copyChallenge } from "#data/challenge"; -import { getDailyStartingBiome } from "#data/daily-run"; +import { allChallenges, type Challenge, copyChallenge } from "#data/challenge"; +import { getDailyEventSeedBoss, getDailyStartingBiome } from "#data/daily-run"; import { allSpecies } from "#data/data-lists"; import type { PokemonSpecies } from "#data/pokemon-species"; import { BiomeId } from "#enums/biome-id"; @@ -14,7 +13,9 @@ import { GameModes } from "#enums/game-modes"; import { SpeciesId } from "#enums/species-id"; import type { Arena } from "#field/arena"; import { classicFixedBattles, type FixedBattleConfigs } from "#trainers/fixed-battle-configs"; -import { isNullOrUndefined, randSeedInt, randSeedItem } from "#utils/common"; +import { applyChallenges } from "#utils/challenge-utils"; +import { BooleanHolder, isNullOrUndefined, randSeedInt, randSeedItem } from "#utils/common"; +import { getPokemonSpecies } from "#utils/pokemon-utils"; import i18next from "i18next"; interface GameModeConfig { @@ -211,6 +212,12 @@ export class GameMode implements GameModeConfig { getOverrideSpecies(waveIndex: number): PokemonSpecies | null { if (this.isDaily && this.isWaveFinal(waveIndex)) { + const eventBoss = getDailyEventSeedBoss(globalScene.seed); + if (!isNullOrUndefined(eventBoss)) { + // Cannot set form index here, it will be overriden when adding it as enemy pokemon. + return getPokemonSpecies(eventBoss.speciesId); + } + const allFinalBossSpecies = allSpecies.filter( s => (s.subLegendary || s.legendary || s.mythical) && @@ -311,6 +318,16 @@ export class GameMode implements GameModeConfig { return this.battleConfig[waveIndex]; } + /** + * Check if the current game mode has the shop enabled or not + * @returns Whether the shop is available in the current mode + */ + public getShopStatus(): boolean { + const status = new BooleanHolder(!this.hasNoShop); + applyChallenges(ChallengeType.SHOP, status); + return status.value; + } + getClearScoreBonus(): number { switch (this.modeId) { case GameModes.CLASSIC: diff --git a/src/loading-scene.ts b/src/loading-scene.ts index c5b0263e785..bf4d87a99f3 100644 --- a/src/loading-scene.ts +++ b/src/loading-scene.ts @@ -29,6 +29,7 @@ export class LoadingScene extends SceneBase { this.loadImage("loading_bg", "arenas"); this.loadImage("logo", ""); + this.loadImage("logo_fake", ""); // Load menu images this.loadAtlas("bg", "ui"); @@ -89,6 +90,7 @@ export class LoadingScene extends SceneBase { this.loadAtlas("shiny_icons", "ui"); this.loadImage("ha_capsule", "ui", "ha_capsule.png"); this.loadImage("champion_ribbon", "ui", "champion_ribbon.png"); + this.loadImage("champion_ribbon_emerald", "ui", "champion_ribbon_emerald.png"); this.loadImage("icon_spliced", "ui"); this.loadImage("icon_lock", "ui", "icon_lock.png"); this.loadImage("icon_stop", "ui", "icon_stop.png"); @@ -121,6 +123,7 @@ export class LoadingScene extends SceneBase { this.loadImage("party_bg_double", "ui"); this.loadImage("party_bg_double_manage", "ui"); this.loadAtlas("party_slot_main", "ui"); + this.loadAtlas("party_slot_main_short", "ui"); this.loadAtlas("party_slot", "ui"); this.loadImage("party_slot_overlay_lv", "ui"); this.loadImage("party_slot_hp_bar", "ui"); @@ -446,7 +449,9 @@ export class LoadingScene extends SceneBase { ); if (!mobile) { - loadingGraphics.map(g => g.setVisible(false)); + loadingGraphics.forEach(g => { + g.setVisible(false); + }); } const intro = this.add.video(0, 0); diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index b359ec756e6..aca49313ff5 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -6,6 +6,7 @@ import Overrides from "#app/overrides"; import { EvolutionItem, pokemonEvolutions } from "#balance/pokemon-evolutions"; import { tmPoolTiers, tmSpecies } from "#balance/tms"; import { getBerryEffectDescription, getBerryName } from "#data/berry"; +import { getDailyEventSeedLuck } from "#data/daily-run"; import { allMoves, modifierTypes } from "#data/data-lists"; import { SpeciesFormChangeItemTrigger } from "#data/form-change-triggers"; import { getNatureName, getNatureStatMultiplier } from "#data/nature"; @@ -14,6 +15,7 @@ import { pokemonFormChanges, SpeciesFormChangeCondition } from "#data/pokemon-fo import { getStatusEffectDescriptor } from "#data/status-effect"; import { BattlerTagType } from "#enums/battler-tag-type"; import { BerryType } from "#enums/berry-type"; +import { ChallengeType } from "#enums/challenge-type"; import { FormChangeItem } from "#enums/form-change-item"; import { ModifierPoolType } from "#enums/modifier-pool-type"; import { ModifierTier } from "#enums/modifier-tier"; @@ -104,7 +106,7 @@ import { TempExtraModifierModifier, TempStatStageBoosterModifier, TerastallizeAccessModifier, - TerrastalizeModifier, + TerastallizeModifier, TmModifier, TurnHealModifier, TurnHeldItemTransferModifier, @@ -116,7 +118,16 @@ import type { ModifierTypeFunc, WeightedModifierTypeWeightFunc } from "#types/mo import type { PokemonMoveSelectFilter, PokemonSelectFilter } from "#ui/party-ui-handler"; import { PartyUiHandler } from "#ui/party-ui-handler"; import { getModifierTierTextTint } from "#ui/text"; -import { formatMoney, isNullOrUndefined, NumberHolder, padInt, randSeedInt, randSeedItem } from "#utils/common"; +import { applyChallenges } from "#utils/challenge-utils"; +import { + BooleanHolder, + formatMoney, + isNullOrUndefined, + NumberHolder, + padInt, + randSeedInt, + randSeedItem, +} from "#utils/common"; import { getEnumKeys, getEnumValues } from "#utils/enums"; import { getModifierPoolForType, getModifierType } from "#utils/modifier-utils"; import i18next from "i18next"; @@ -421,7 +432,7 @@ export class TerastallizeModifierType extends PokemonModifierType { super( "", `${PokemonType[teraType].toLowerCase()}_tera_shard`, - (type, args) => new TerrastalizeModifier(type as TerastallizeModifierType, (args[0] as Pokemon).id, teraType), + (type, args) => new TerastallizeModifier(type as TerastallizeModifierType, (args[0] as Pokemon).id, teraType), (pokemon: PlayerPokemon) => { if ( [pokemon.species.speciesId, pokemon.fusionSpecies?.speciesId].filter( @@ -533,7 +544,9 @@ export class PokemonReviveModifierType extends PokemonHpRestoreModifierType { ); this.selectFilter = (pokemon: PlayerPokemon) => { - if (pokemon.hp) { + const selectStatus = new BooleanHolder(pokemon.hp !== 0); + applyChallenges(ChallengeType.PREVENT_REVIVE, selectStatus); + if (selectStatus.value) { return PartyUiHandler.NoEffectMessage; } return null; @@ -1011,6 +1024,7 @@ class AllPokemonFullReviveModifierType extends AllPokemonFullHpRestoreModifierTy "modifierType:ModifierType.AllPokemonFullReviveModifierType", (_type, _args) => new PokemonHpRestoreModifier(this, -1, 0, 100, false, true), ); + this.group = "revive"; } } @@ -1262,7 +1276,9 @@ export class FusePokemonModifierType extends PokemonModifierType { iconImage, (_type, args) => new FusePokemonModifier(this, (args[0] as PlayerPokemon).id, (args[1] as PlayerPokemon).id), (pokemon: PlayerPokemon) => { - if (pokemon.isFusion()) { + const selectStatus = new BooleanHolder(pokemon.isFusion()); + applyChallenges(ChallengeType.POKEMON_FUSION, pokemon, selectStatus); + if (selectStatus.value) { return PartyUiHandler.NoEffectMessage; } return null; @@ -2574,11 +2590,15 @@ function getModifierTypeOptionWithRetry( ): ModifierTypeOption { allowLuckUpgrades = allowLuckUpgrades ?? true; let candidate = getNewModifierTypeOption(party, ModifierPoolType.PLAYER, tier, undefined, 0, allowLuckUpgrades); + const candidateValidity = new BooleanHolder(true); + applyChallenges(ChallengeType.WAVE_REWARD, candidate, candidateValidity); let r = 0; while ( - existingOptions.length && - ++r < retryCount && - existingOptions.filter(o => o.type.name === candidate?.type.name || o.type.group === candidate?.type.group).length + (existingOptions.length && + ++r < retryCount && + existingOptions.filter(o => o.type.name === candidate?.type.name || o.type.group === candidate?.type.group) + .length) || + !candidateValidity.value ) { candidate = getNewModifierTypeOption( party, @@ -2588,6 +2608,7 @@ function getModifierTypeOptionWithRetry( 0, allowLuckUpgrades, ); + applyChallenges(ChallengeType.WAVE_REWARD, candidate, candidateValidity); } return candidate!; } @@ -2648,7 +2669,15 @@ export function getPlayerShopModifierTypeOptionsForWave(waveIndex: number, baseC [new ModifierTypeOption(modifierTypeInitObj.FULL_RESTORE(), 0, baseCost * 2.25)], [new ModifierTypeOption(modifierTypeInitObj.SACRED_ASH(), 0, baseCost * 10)], ]; - return options.slice(0, Math.ceil(Math.max(waveIndex + 10, 0) / 30)).flat(); + + return options + .slice(0, Math.ceil(Math.max(waveIndex + 10, 0) / 30)) + .flat() + .filter(shopItem => { + const status = new BooleanHolder(true); + applyChallenges(ChallengeType.SHOP_ITEM, shopItem, status); + return status.value; + }); } export function getEnemyBuffModifierForWave( @@ -2893,6 +2922,12 @@ export function getPartyLuckValue(party: Pokemon[]): number { const DailyLuck = new NumberHolder(0); globalScene.executeWithSeedOffset( () => { + const eventLuck = getDailyEventSeedLuck(globalScene.seed); + if (!isNullOrUndefined(eventLuck)) { + DailyLuck.value = eventLuck; + return; + } + DailyLuck.value = randSeedInt(15); // Random number between 0 and 14 }, 0, @@ -2900,6 +2935,7 @@ export function getPartyLuckValue(party: Pokemon[]): number { ); return DailyLuck.value; } + const eventSpecies = timedEventManager.getEventLuckBoostedSpecies(); const luck = Phaser.Math.Clamp( party diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index b31bee7fc69..076e2656b5c 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -121,8 +121,8 @@ export class ModifierBar extends Phaser.GameObjects.Container { } updateModifierOverflowVisibility(ignoreLimit: boolean) { - const modifierIcons = this.getAll().reverse(); - for (const modifier of modifierIcons.map(m => m as Phaser.GameObjects.Container).slice(iconOverflowIndex)) { + const modifierIcons = this.getAll().reverse() as Phaser.GameObjects.Container[]; + for (const modifier of modifierIcons.slice(iconOverflowIndex)) { modifier.setVisible(ignoreLimit); } } @@ -2073,7 +2073,7 @@ export abstract class ConsumablePokemonModifier extends ConsumableModifier { } } -export class TerrastalizeModifier extends ConsumablePokemonModifier { +export class TerastallizeModifier extends ConsumablePokemonModifier { public declare type: TerastallizeModifierType; public teraType: PokemonType; @@ -2084,9 +2084,9 @@ export class TerrastalizeModifier extends ConsumablePokemonModifier { } /** - * Checks if {@linkcode TerrastalizeModifier} should be applied + * Checks if {@linkcode TerastallizeModifier} should be applied * @param playerPokemon The {@linkcode PlayerPokemon} that consumes the item - * @returns `true` if the {@linkcode TerrastalizeModifier} should be applied + * @returns `true` if the {@linkcode TerastallizeModifier} should be applied */ override shouldApply(playerPokemon?: PlayerPokemon): boolean { return ( @@ -2098,7 +2098,7 @@ export class TerrastalizeModifier extends ConsumablePokemonModifier { } /** - * Applies {@linkcode TerrastalizeModifier} + * Applies {@linkcode TerastallizeModifier} * @param pokemon The {@linkcode PlayerPokemon} that consumes the item * @returns `true` if hp was restored */ @@ -2304,7 +2304,7 @@ export class PokemonLevelIncrementModifier extends ConsumablePokemonModifier { playerPokemon.levelExp = 0; } - playerPokemon.addFriendship(FRIENDSHIP_GAIN_FROM_RARE_CANDY); + playerPokemon.addFriendship(FRIENDSHIP_GAIN_FROM_RARE_CANDY, true); globalScene.phaseManager.unshiftNew( "LevelUpPhase", @@ -3755,7 +3755,7 @@ export class EnemyFusionChanceModifier extends EnemyPersistentModifier { export function overrideModifiers(isPlayer = true): void { const modifiersOverride: ModifierOverride[] = isPlayer ? Overrides.STARTING_MODIFIER_OVERRIDE - : Overrides.OPP_MODIFIER_OVERRIDE; + : Overrides.ENEMY_MODIFIER_OVERRIDE; if (!modifiersOverride || modifiersOverride.length === 0 || !globalScene) { return; } @@ -3797,7 +3797,7 @@ export function overrideModifiers(isPlayer = true): void { export function overrideHeldItems(pokemon: Pokemon, isPlayer = true): void { const heldItemsOverride: ModifierOverride[] = isPlayer ? Overrides.STARTING_HELD_ITEMS_OVERRIDE - : Overrides.OPP_HELD_ITEMS_OVERRIDE; + : Overrides.ENEMY_HELD_ITEMS_OVERRIDE; if (!heldItemsOverride || heldItemsOverride.length === 0 || !globalScene) { return; } @@ -3875,7 +3875,7 @@ const ModifierClassMap = Object.freeze({ ResetNegativeStatStageModifier, FieldEffectModifier, ConsumablePokemonModifier, - TerrastalizeModifier, + TerastallizeModifier, PokemonHpRestoreModifier, PokemonStatusHealModifier, ConsumablePokemonMoveModifier, diff --git a/src/overrides.ts b/src/overrides.ts index de0d1d3f30a..48d7428cad9 100644 --- a/src/overrides.ts +++ b/src/overrides.ts @@ -179,25 +179,24 @@ class DefaultOverrides { // -------------------------- // OPPONENT / ENEMY OVERRIDES // -------------------------- - // TODO: rename `OPP_` to `ENEMY_` - readonly OPP_SPECIES_OVERRIDE: SpeciesId | number = 0; + readonly ENEMY_SPECIES_OVERRIDE: SpeciesId | number = 0; /** * This will make all opponents fused Pokemon */ - readonly OPP_FUSION_OVERRIDE: boolean = false; + readonly ENEMY_FUSION_OVERRIDE: boolean = false; /** * This will override the species of the fusion only when the opponent is already a fusion */ - readonly OPP_FUSION_SPECIES_OVERRIDE: SpeciesId | number = 0; - readonly OPP_LEVEL_OVERRIDE: number = 0; - readonly OPP_ABILITY_OVERRIDE: AbilityId = AbilityId.NONE; - readonly OPP_PASSIVE_ABILITY_OVERRIDE: AbilityId = AbilityId.NONE; - readonly OPP_HAS_PASSIVE_ABILITY_OVERRIDE: boolean | null = null; - readonly OPP_STATUS_OVERRIDE: StatusEffect = StatusEffect.NONE; - readonly OPP_GENDER_OVERRIDE: Gender | null = null; - readonly OPP_MOVESET_OVERRIDE: MoveId | Array = []; - readonly OPP_SHINY_OVERRIDE: boolean | null = null; - readonly OPP_VARIANT_OVERRIDE: Variant | null = null; + readonly ENEMY_FUSION_SPECIES_OVERRIDE: SpeciesId | number = 0; + readonly ENEMY_LEVEL_OVERRIDE: number = 0; + readonly ENEMY_ABILITY_OVERRIDE: AbilityId = AbilityId.NONE; + readonly ENEMY_PASSIVE_ABILITY_OVERRIDE: AbilityId = AbilityId.NONE; + readonly ENEMY_HAS_PASSIVE_ABILITY_OVERRIDE: boolean | null = null; + readonly ENEMY_STATUS_OVERRIDE: StatusEffect = StatusEffect.NONE; + readonly ENEMY_GENDER_OVERRIDE: Gender | null = null; + readonly ENEMY_MOVESET_OVERRIDE: MoveId | Array = []; + readonly ENEMY_SHINY_OVERRIDE: boolean | null = null; + readonly ENEMY_VARIANT_OVERRIDE: Variant | null = null; /** * Overrides the IVs of enemy pokemon. Values must never be outside the range `0` to `31`! * - If set to a number between `0` and `31`, set all IVs of all enemy pokemon to that number. @@ -207,7 +206,7 @@ class DefaultOverrides { readonly ENEMY_IVS_OVERRIDE: number | number[] | null = null; /** Override the nature of all enemy pokemon to the specified nature. Disabled if `null`. */ readonly ENEMY_NATURE_OVERRIDE: Nature | null = null; - readonly OPP_FORM_OVERRIDES: Partial> = {}; + readonly ENEMY_FORM_OVERRIDES: Partial> = {}; /** * Override to give the enemy Pokemon a given amount of health segments * @@ -215,7 +214,7 @@ class DefaultOverrides { * 1: the Pokemon will have a single health segment and therefore will not be a boss * 2+: the Pokemon will be a boss with the given number of health segments */ - readonly OPP_HEALTH_SEGMENTS_OVERRIDE: number = 0; + readonly ENEMY_HEALTH_SEGMENTS_OVERRIDE: number = 0; // ------------- // EGG OVERRIDES @@ -277,12 +276,12 @@ class DefaultOverrides { * * Note that any previous modifiers are cleared. */ - readonly OPP_MODIFIER_OVERRIDE: ModifierOverride[] = []; + readonly ENEMY_MODIFIER_OVERRIDE: ModifierOverride[] = []; /** Override array of {@linkcode ModifierOverride}s used to provide held items to first party member when starting a new game. */ readonly STARTING_HELD_ITEMS_OVERRIDE: ModifierOverride[] = []; /** Override array of {@linkcode ModifierOverride}s used to provide held items to enemies on spawn. */ - readonly OPP_HELD_ITEMS_OVERRIDE: ModifierOverride[] = []; + readonly ENEMY_HELD_ITEMS_OVERRIDE: ModifierOverride[] = []; /** * Override array of {@linkcode ModifierOverride}s used to replace the generated item rolls after a wave. diff --git a/src/phase.ts b/src/phase.ts index 46a81dddb6f..eccbf3127e6 100644 --- a/src/phase.ts +++ b/src/phase.ts @@ -11,7 +11,7 @@ export abstract class Phase { /** * The string name of the phase, used to identify the phase type for {@linkcode is} * - * @privateremarks + * @privateRemarks * * When implementing a phase, you must set the `phaseName` property to the name of the phase. */ diff --git a/src/phases/attempt-capture-phase.ts b/src/phases/attempt-capture-phase.ts index fcddd23dd20..b34ddb0c59a 100644 --- a/src/phases/attempt-capture-phase.ts +++ b/src/phases/attempt-capture-phase.ts @@ -12,6 +12,7 @@ import { } from "#data/pokeball"; import { getStatusEffectCatchRateMultiplier } from "#data/status-effect"; import { BattlerIndex } from "#enums/battler-index"; +import { ChallengeType } from "#enums/challenge-type"; import type { PokeballType } from "#enums/pokeball"; import { StatusEffect } from "#enums/status-effect"; import { UiMode } from "#enums/ui-mode"; @@ -23,6 +24,8 @@ import { achvs } from "#system/achv"; import type { PartyOption } from "#ui/party-ui-handler"; import { PartyUiMode } from "#ui/party-ui-handler"; import { SummaryUiMode } from "#ui/summary-ui-handler"; +import { applyChallenges } from "#utils/challenge-utils"; +import { BooleanHolder } from "#utils/common"; import i18next from "i18next"; // TODO: Refactor and split up to allow for overriding capture chance @@ -250,8 +253,11 @@ export class AttemptCapturePhase extends PokemonPhase { globalScene.gameData.updateSpeciesDexIvs(pokemon.species.getRootSpeciesId(true), pokemon.ivs); + const addStatus = new BooleanHolder(true); + applyChallenges(ChallengeType.POKEMON_ADD_TO_PARTY, pokemon, addStatus); + globalScene.ui.showText( - i18next.t("battle:pokemonCaught", { + i18next.t(addStatus.value ? "battle:pokemonCaught" : "battle:pokemonCaughtButChallenge", { pokemonName: getPokemonNameWithAffix(pokemon), }), null, @@ -287,6 +293,11 @@ export class AttemptCapturePhase extends PokemonPhase { }); }; Promise.all([pokemon.hideInfo(), globalScene.gameData.setPokemonCaught(pokemon)]).then(() => { + if (!addStatus.value) { + removePokemon(); + end(); + return; + } if (globalScene.getPlayerParty().length === PLAYER_PARTY_MAX_SIZE) { const promptRelease = () => { globalScene.ui.showText( diff --git a/src/phases/command-phase.ts b/src/phases/command-phase.ts index 016d4ff5d3b..ff9ee7cc197 100644 --- a/src/phases/command-phase.ts +++ b/src/phases/command-phase.ts @@ -9,6 +9,7 @@ import { ArenaTagType } from "#enums/arena-tag-type"; import { BattleType } from "#enums/battle-type"; import { BattlerTagType } from "#enums/battler-tag-type"; import { BiomeId } from "#enums/biome-id"; +import { ChallengeType } from "#enums/challenge-type"; import { Command } from "#enums/command"; import { FieldPosition } from "#enums/field-position"; import { MoveId } from "#enums/move-id"; @@ -21,6 +22,8 @@ import type { MoveTargetSet } from "#moves/move"; import { getMoveTargets } from "#moves/move-utils"; import { FieldPhase } from "#phases/field-phase"; import type { TurnMove } from "#types/turn-move"; +import { applyChallenges } from "#utils/challenge-utils"; +import { BooleanHolder } from "#utils/common"; import i18next from "i18next"; export class CommandPhase extends FieldPhase { @@ -109,7 +112,7 @@ export class CommandPhase extends FieldPhase { * Clear out all unusable moves in front of the currently acting pokemon's move queue. */ // TODO: Refactor move queue handling to ensure that this method is not necessary. - private clearUnusuableMoves(): void { + private clearUnusableMoves(): void { const playerPokemon = this.getPokemon(); const moveQueue = playerPokemon.getMoveQueue(); if (moveQueue.length === 0) { @@ -140,7 +143,7 @@ export class CommandPhase extends FieldPhase { * @returns Whether a queued move was successfully set to be executed. */ private tryExecuteQueuedMove(): boolean { - this.clearUnusuableMoves(); + this.clearUnusableMoves(); const playerPokemon = globalScene.getPlayerField()[this.fieldIndex]; const moveQueue = playerPokemon.getMoveQueue(); @@ -210,16 +213,27 @@ export class CommandPhase extends FieldPhase { const move = user.getMoveset()[cursor]; globalScene.ui.setMode(UiMode.MESSAGE); - // Decides between a Disabled, Not Implemented, or No PP translation message - const errorMessage = user.isMoveRestricted(move.moveId, user) - ? user.getRestrictingTag(move.moveId, user)!.selectionDeniedText(user, move.moveId) - : move.getName().endsWith(" (N)") - ? "battle:moveNotImplemented" - : "battle:moveNoPP"; + // Set the translation key for why the move cannot be selected + let cannotSelectKey: string; + const moveStatus = new BooleanHolder(true); + applyChallenges(ChallengeType.POKEMON_MOVE, move.moveId, moveStatus); + if (!moveStatus.value) { + cannotSelectKey = "battle:moveCannotUseChallenge"; + } else if (move.getPpRatio() === 0) { + cannotSelectKey = "battle:moveNoPP"; + } else if (move.getName().endsWith(" (N)")) { + cannotSelectKey = "battle:moveNotImplemented"; + } else if (user.isMoveRestricted(move.moveId, user)) { + cannotSelectKey = user.getRestrictingTag(move.moveId, user)!.selectionDeniedText(user, move.moveId); + } else { + // TODO: Consider a message that signals a being unusable for an unknown reason + cannotSelectKey = ""; + } + const moveName = move.getName().replace(" (N)", ""); // Trims off the indicator globalScene.ui.showText( - i18next.t(errorMessage, { moveName: moveName }), + i18next.t(cannotSelectKey, { moveName: moveName }), null, () => { globalScene.ui.clearText(); diff --git a/src/phases/egg-hatch-phase.ts b/src/phases/egg-hatch-phase.ts index 94923ae8c1f..e9d28e0fe2a 100644 --- a/src/phases/egg-hatch-phase.ts +++ b/src/phases/egg-hatch-phase.ts @@ -148,9 +148,9 @@ export class EggHatchPhase extends Phase { this.eggHatchOverlay = globalScene.add.rectangle( 0, - -globalScene.game.canvas.height / 6, - globalScene.game.canvas.width / 6, - globalScene.game.canvas.height / 6, + -globalScene.scaledCanvas.height, + globalScene.scaledCanvas.width, + globalScene.scaledCanvas.height, 0xffffff, ); this.eggHatchOverlay.setOrigin(0, 0); diff --git a/src/phases/encounter-phase.ts b/src/phases/encounter-phase.ts index 79da7134e9a..b870f7f6e7a 100644 --- a/src/phases/encounter-phase.ts +++ b/src/phases/encounter-phase.ts @@ -229,7 +229,7 @@ export class EncounterPhase extends BattlePhase { }), ); } else { - const overridedBossSegments = Overrides.OPP_HEALTH_SEGMENTS_OVERRIDE > 1; + const overridedBossSegments = Overrides.ENEMY_HEALTH_SEGMENTS_OVERRIDE > 1; // for double battles, reduce the health segments for boss Pokemon unless there is an override if (!overridedBossSegments && battle.enemyParty.filter(p => p.isBoss()).length > 1) { for (const enemyPokemon of battle.enemyParty) { diff --git a/src/phases/end-card-phase.ts b/src/phases/end-card-phase.ts index b9b383db13d..5ce0ca47b99 100644 --- a/src/phases/end-card-phase.ts +++ b/src/phases/end-card-phase.ts @@ -25,8 +25,8 @@ export class EndCardPhase extends Phase { globalScene.field.add(this.endCard); this.text = addTextObject( - globalScene.game.canvas.width / 12, - globalScene.game.canvas.height / 6 - 16, + globalScene.scaledCanvas.width / 2, + globalScene.scaledCanvas.height - 16, i18next.t("battle:congratulations"), TextStyle.SUMMARY, { fontSize: "128px" }, diff --git a/src/phases/evolution-phase.ts b/src/phases/evolution-phase.ts index cad79455af3..ad3db97d520 100644 --- a/src/phases/evolution-phase.ts +++ b/src/phases/evolution-phase.ts @@ -90,16 +90,16 @@ export class EvolutionPhase extends Phase { .setVisible(false); this.evolutionBgOverlay = globalScene.add - .rectangle(0, 0, globalScene.game.canvas.width / 6, globalScene.game.canvas.height / 6, 0x262626) + .rectangle(0, 0, globalScene.scaledCanvas.width, globalScene.scaledCanvas.height, 0x262626) .setOrigin(0) .setAlpha(0); this.evolutionContainer.add([this.evolutionBaseBg, this.evolutionBgOverlay, this.evolutionBg]); this.evolutionOverlay = globalScene.add.rectangle( 0, - -globalScene.game.canvas.height / 6, - globalScene.game.canvas.width / 6, - globalScene.game.canvas.height / 6 - 48, + -globalScene.scaledCanvas.height, + globalScene.scaledCanvas.width, + globalScene.scaledCanvas.height - 48, 0xffffff, ); this.evolutionOverlay.setOrigin(0).setAlpha(0); diff --git a/src/phases/game-over-phase.ts b/src/phases/game-over-phase.ts index d4562b5a237..25dfffaa582 100644 --- a/src/phases/game-over-phase.ts +++ b/src/phases/game-over-phase.ts @@ -19,8 +19,11 @@ import { ChallengeData } from "#system/challenge-data"; import type { SessionSaveData } from "#system/game-data"; import { ModifierData as PersistentModifierData } from "#system/modifier-data"; import { PokemonData } from "#system/pokemon-data"; +import { RibbonData, type RibbonFlag } from "#system/ribbons/ribbon-data"; +import { awardRibbonsToSpeciesLine } from "#system/ribbons/ribbon-methods"; import { TrainerData } from "#system/trainer-data"; import { trainerConfigs } from "#trainers/trainer-config"; +import { checkSpeciesValidForChallenge, isNuzlockeChallenge } from "#utils/challenge-utils"; import { isLocal, isLocalServerConnected } from "#utils/common"; import { getPokemonSpecies } from "#utils/pokemon-utils"; import i18next from "i18next"; @@ -111,6 +114,40 @@ export class GameOverPhase extends BattlePhase { } } + /** + * Submethod of {@linkcode handleGameOver} that awards ribbons to Pokémon in the player's party based on the current + * game mode and challenges. + */ + private awardRibbons(): void { + let ribbonFlags = 0; + if (globalScene.gameMode.isClassic) { + ribbonFlags |= RibbonData.CLASSIC; + } + if (isNuzlockeChallenge()) { + ribbonFlags |= RibbonData.NUZLOCKE; + } + for (const challenge of globalScene.gameMode.challenges) { + const ribbon = challenge.ribbonAwarded; + if (challenge.value && ribbon) { + ribbonFlags |= ribbon; + } + } + // Award ribbons to all Pokémon in the player's party that are considered valid + // for the current game mode and challenges. + for (const pokemon of globalScene.getPlayerParty()) { + const species = pokemon.species; + if ( + checkSpeciesValidForChallenge( + species, + globalScene.gameData.getSpeciesDexAttrProps(species, pokemon.getDexAttr()), + false, + ) + ) { + awardRibbonsToSpeciesLine(species.speciesId, ribbonFlags as RibbonFlag); + } + } + } + handleGameOver(): void { const doGameOver = (newClear: boolean) => { globalScene.disableMenu = true; @@ -122,12 +159,12 @@ export class GameOverPhase extends BattlePhase { globalScene.validateAchv(achvs.UNEVOLVED_CLASSIC_VICTORY); globalScene.gameData.gameStats.sessionsWon++; for (const pokemon of globalScene.getPlayerParty()) { - this.awardRibbon(pokemon); - + this.awardFirstClassicCompletion(pokemon); if (pokemon.species.getRootSpeciesId() !== pokemon.species.getRootSpeciesId(true)) { - this.awardRibbon(pokemon, true); + this.awardFirstClassicCompletion(pokemon, true); } } + this.awardRibbons(); } else if (globalScene.gameMode.isDaily && newClear) { globalScene.gameData.gameStats.dailyRunSessionsWon++; } @@ -263,7 +300,7 @@ export class GameOverPhase extends BattlePhase { } } - awardRibbon(pokemon: Pokemon, forStarter = false): void { + awardFirstClassicCompletion(pokemon: Pokemon, forStarter = false): void { const speciesId = getPokemonSpecies(pokemon.species.speciesId); const speciesRibbonCount = globalScene.gameData.incrementRibbonCount(speciesId, forStarter); // first time classic win, award voucher diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index c57e0f6cead..767d7a79968 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -829,6 +829,7 @@ export class MoveEffectPhase extends PokemonPhase { const substitute = target.getTag(SubstituteTag); const isBlockedBySubstitute = substitute && this.move.hitsSubstitute(user, target); if (isBlockedBySubstitute) { + user.turnData.totalDamageDealt += Math.min(dmg, substitute.hp); substitute.hp -= dmg; } else if (!target.isPlayer() && dmg >= target.hp) { globalScene.applyModifiers(EnemyEndureChanceModifier, false, target); diff --git a/src/phases/party-heal-phase.ts b/src/phases/party-heal-phase.ts index 80d8b315102..1030d5eb9d9 100644 --- a/src/phases/party-heal-phase.ts +++ b/src/phases/party-heal-phase.ts @@ -1,6 +1,8 @@ import { globalScene } from "#app/global-scene"; +import { ChallengeType } from "#enums/challenge-type"; import { BattlePhase } from "#phases/battle-phase"; -import { fixedInt } from "#utils/common"; +import { applyChallenges } from "#utils/challenge-utils"; +import { BooleanHolder, fixedInt } from "#utils/common"; export class PartyHealPhase extends BattlePhase { public readonly phaseName = "PartyHealPhase"; @@ -20,7 +22,14 @@ export class PartyHealPhase extends BattlePhase { globalScene.fadeOutBgm(1000, false); } globalScene.ui.fadeOut(1000).then(() => { + const preventRevive = new BooleanHolder(false); + applyChallenges(ChallengeType.PREVENT_REVIVE, preventRevive); for (const pokemon of globalScene.getPlayerParty()) { + // Prevent reviving fainted pokemon during certain challenges + if (pokemon.isFainted() && preventRevive.value) { + continue; + } + pokemon.hp = pokemon.getMaxHp(); pokemon.resetStatus(true, false, false, true); for (const move of pokemon.moveset) { diff --git a/src/phases/select-biome-phase.ts b/src/phases/select-biome-phase.ts index ab96bf5c45e..d02d69fc934 100644 --- a/src/phases/select-biome-phase.ts +++ b/src/phases/select-biome-phase.ts @@ -1,11 +1,13 @@ import { globalScene } from "#app/global-scene"; import { biomeLinks, getBiomeName } from "#balance/biomes"; import { BiomeId } from "#enums/biome-id"; +import { ChallengeType } from "#enums/challenge-type"; import { UiMode } from "#enums/ui-mode"; import { MapModifier, MoneyInterestModifier } from "#modifiers/modifier"; import { BattlePhase } from "#phases/battle-phase"; -import type { OptionSelectItem } from "#ui/abstact-option-select-ui-handler"; -import { randSeedInt } from "#utils/common"; +import type { OptionSelectItem } from "#ui/abstract-option-select-ui-handler"; +import { applyChallenges } from "#utils/challenge-utils"; +import { BooleanHolder, randSeedInt } from "#utils/common"; export class SelectBiomePhase extends BattlePhase { public readonly phaseName = "SelectBiomePhase"; @@ -14,25 +16,40 @@ export class SelectBiomePhase extends BattlePhase { globalScene.resetSeed(); + const gameMode = globalScene.gameMode; const currentBiome = globalScene.arena.biomeType; - const nextWaveIndex = globalScene.currentBattle.waveIndex + 1; + const currentWaveIndex = globalScene.currentBattle.waveIndex; + const nextWaveIndex = currentWaveIndex + 1; const setNextBiome = (nextBiome: BiomeId) => { if (nextWaveIndex % 10 === 1) { globalScene.applyModifiers(MoneyInterestModifier, true); - globalScene.phaseManager.unshiftNew("PartyHealPhase", false); + const healStatus = new BooleanHolder(true); + applyChallenges(ChallengeType.PARTY_HEAL, healStatus); + if (healStatus.value) { + globalScene.phaseManager.unshiftNew("PartyHealPhase", false); + } else { + globalScene.phaseManager.unshiftNew( + "SelectModifierPhase", + undefined, + undefined, + gameMode.isFixedBattle(currentWaveIndex) + ? gameMode.getFixedBattle(currentWaveIndex).customModifierRewardSettings + : undefined, + ); + } } globalScene.phaseManager.unshiftNew("SwitchBiomePhase", nextBiome); this.end(); }; if ( - (globalScene.gameMode.isClassic && globalScene.gameMode.isWaveFinal(nextWaveIndex + 9)) || - (globalScene.gameMode.isDaily && globalScene.gameMode.isWaveFinal(nextWaveIndex)) || - (globalScene.gameMode.hasShortBiomes && !(nextWaveIndex % 50)) + (gameMode.isClassic && gameMode.isWaveFinal(nextWaveIndex + 9)) || + (gameMode.isDaily && gameMode.isWaveFinal(nextWaveIndex)) || + (gameMode.hasShortBiomes && !(nextWaveIndex % 50)) ) { setNextBiome(BiomeId.END); - } else if (globalScene.gameMode.hasRandomBiomes) { + } else if (gameMode.hasRandomBiomes) { setNextBiome(this.generateNextBiome(nextWaveIndex)); } else if (Array.isArray(biomeLinks[currentBiome])) { const biomes: BiomeId[] = (biomeLinks[currentBiome] as (BiomeId | [BiomeId, number])[]) @@ -67,9 +84,6 @@ export class SelectBiomePhase extends BattlePhase { } generateNextBiome(waveIndex: number): BiomeId { - if (!(waveIndex % 50)) { - return BiomeId.END; - } - return globalScene.generateRandomBiome(waveIndex); + return waveIndex % 50 === 0 ? BiomeId.END : globalScene.generateRandomBiome(waveIndex); } } diff --git a/src/phases/select-starter-phase.ts b/src/phases/select-starter-phase.ts index d6bd252c77d..ef3fa74bd44 100644 --- a/src/phases/select-starter-phase.ts +++ b/src/phases/select-starter-phase.ts @@ -1,7 +1,6 @@ import { globalScene } from "#app/global-scene"; import Overrides from "#app/overrides"; import { Phase } from "#app/phase"; -import { applyChallenges } from "#data/challenge"; import { SpeciesFormChangeMoveLearnedTrigger } from "#data/form-change-triggers"; import { Gender } from "#data/gender"; import { ChallengeType } from "#enums/challenge-type"; @@ -10,6 +9,7 @@ import { UiMode } from "#enums/ui-mode"; import { overrideHeldItems, overrideModifiers } from "#modifiers/modifier"; import { SaveSlotUiMode } from "#ui/save-slot-select-ui-handler"; import type { Starter } from "#ui/starter-select-ui-handler"; +import { applyChallenges } from "#utils/challenge-utils"; import { isNullOrUndefined } from "#utils/common"; import { getPokemonSpecies } from "#utils/pokemon-utils"; import SoundFade from "phaser3-rex-plugins/plugins/soundfade"; diff --git a/src/phases/title-phase.ts b/src/phases/title-phase.ts index 6f0493f707d..15d92ba2812 100644 --- a/src/phases/title-phase.ts +++ b/src/phases/title-phase.ts @@ -16,7 +16,7 @@ import type { Modifier } from "#modifiers/modifier"; import { getDailyRunStarterModifiers, regenerateModifierPoolThresholds } from "#modifiers/modifier-type"; import type { SessionSaveData } from "#system/game-data"; import { vouchers } from "#system/voucher"; -import type { OptionSelectConfig, OptionSelectItem } from "#ui/abstact-option-select-ui-handler"; +import type { OptionSelectConfig, OptionSelectItem } from "#ui/abstract-option-select-ui-handler"; import { SaveSlotUiMode } from "#ui/save-slot-select-ui-handler"; import { isLocal, isLocalServerConnected, isNullOrUndefined } from "#utils/common"; import i18next from "i18next"; diff --git a/src/phases/victory-phase.ts b/src/phases/victory-phase.ts index 4b1a79d7443..ac567cc99c5 100644 --- a/src/phases/victory-phase.ts +++ b/src/phases/victory-phase.ts @@ -4,7 +4,6 @@ import { modifierTypes } from "#data/data-lists"; import { BattleType } from "#enums/battle-type"; import type { BattlerIndex } from "#enums/battler-index"; import { ClassicFixedBossWaves } from "#enums/fixed-boss-waves"; -import type { CustomModifierSettings } from "#modifiers/modifier-type"; import { handleMysteryEncounterVictory } from "#mystery-encounters/encounter-phase-utils"; import { PokemonPhase } from "#phases/pokemon-phase"; @@ -46,15 +45,19 @@ export class VictoryPhase extends PokemonPhase { if (globalScene.currentBattle.battleType === BattleType.TRAINER) { globalScene.phaseManager.pushNew("TrainerVictoryPhase"); } - if (globalScene.gameMode.isEndless || !globalScene.gameMode.isWaveFinal(globalScene.currentBattle.waveIndex)) { + + const gameMode = globalScene.gameMode; + const currentWaveIndex = globalScene.currentBattle.waveIndex; + + if (gameMode.isEndless || !gameMode.isWaveFinal(currentWaveIndex)) { globalScene.phaseManager.pushNew("EggLapsePhase"); - if (globalScene.gameMode.isClassic) { - switch (globalScene.currentBattle.waveIndex) { + if (gameMode.isClassic) { + switch (currentWaveIndex) { case ClassicFixedBossWaves.RIVAL_1: case ClassicFixedBossWaves.RIVAL_2: // Get event modifiers for this wave timedEventManager - .getFixedBattleEventRewards(globalScene.currentBattle.waveIndex) + .getFixedBattleEventRewards(currentWaveIndex) .map(r => globalScene.phaseManager.pushNew("ModifierRewardPhase", modifierTypes[r])); break; case ClassicFixedBossWaves.EVIL_BOSS_2: @@ -63,57 +66,53 @@ export class VictoryPhase extends PokemonPhase { break; } } - if (globalScene.currentBattle.waveIndex % 10) { + if (currentWaveIndex % 10) { globalScene.phaseManager.pushNew( "SelectModifierPhase", undefined, undefined, - this.getFixedBattleCustomModifiers(), + gameMode.isFixedBattle(currentWaveIndex) + ? gameMode.getFixedBattle(currentWaveIndex).customModifierRewardSettings + : undefined, ); - } else if (globalScene.gameMode.isDaily) { + } else if (gameMode.isDaily) { globalScene.phaseManager.pushNew("ModifierRewardPhase", modifierTypes.EXP_CHARM); - if ( - globalScene.currentBattle.waveIndex > 10 && - !globalScene.gameMode.isWaveFinal(globalScene.currentBattle.waveIndex) - ) { + if (currentWaveIndex > 10 && !gameMode.isWaveFinal(currentWaveIndex)) { globalScene.phaseManager.pushNew("ModifierRewardPhase", modifierTypes.GOLDEN_POKEBALL); } } else { - const superExpWave = !globalScene.gameMode.isEndless ? (globalScene.offsetGym ? 0 : 20) : 10; - if (globalScene.gameMode.isEndless && globalScene.currentBattle.waveIndex === 10) { + const superExpWave = !gameMode.isEndless ? (globalScene.offsetGym ? 0 : 20) : 10; + if (gameMode.isEndless && currentWaveIndex === 10) { globalScene.phaseManager.pushNew("ModifierRewardPhase", modifierTypes.EXP_SHARE); } - if ( - globalScene.currentBattle.waveIndex <= 750 && - (globalScene.currentBattle.waveIndex <= 500 || globalScene.currentBattle.waveIndex % 30 === superExpWave) - ) { + if (currentWaveIndex <= 750 && (currentWaveIndex <= 500 || currentWaveIndex % 30 === superExpWave)) { globalScene.phaseManager.pushNew( "ModifierRewardPhase", - globalScene.currentBattle.waveIndex % 30 !== superExpWave || globalScene.currentBattle.waveIndex > 250 + currentWaveIndex % 30 !== superExpWave || currentWaveIndex > 250 ? modifierTypes.EXP_CHARM : modifierTypes.SUPER_EXP_CHARM, ); } - if (globalScene.currentBattle.waveIndex <= 150 && !(globalScene.currentBattle.waveIndex % 50)) { + if (currentWaveIndex <= 150 && !(currentWaveIndex % 50)) { globalScene.phaseManager.pushNew("ModifierRewardPhase", modifierTypes.GOLDEN_POKEBALL); } - if (globalScene.gameMode.isEndless && !(globalScene.currentBattle.waveIndex % 50)) { + if (gameMode.isEndless && !(currentWaveIndex % 50)) { globalScene.phaseManager.pushNew( "ModifierRewardPhase", - !(globalScene.currentBattle.waveIndex % 250) ? modifierTypes.VOUCHER_PREMIUM : modifierTypes.VOUCHER_PLUS, + !(currentWaveIndex % 250) ? modifierTypes.VOUCHER_PREMIUM : modifierTypes.VOUCHER_PLUS, ); globalScene.phaseManager.pushNew("AddEnemyBuffModifierPhase"); } } - if (globalScene.gameMode.hasRandomBiomes || globalScene.isNewBiome()) { + if (gameMode.hasRandomBiomes || globalScene.isNewBiome()) { globalScene.phaseManager.pushNew("SelectBiomePhase"); } globalScene.phaseManager.pushNew("NewBattlePhase"); } else { globalScene.currentBattle.battleType = BattleType.CLEAR; - globalScene.score += globalScene.gameMode.getClearScoreBonus(); + globalScene.score += gameMode.getClearScoreBonus(); globalScene.updateScoreText(); globalScene.phaseManager.pushNew("GameOverPhase", true); } @@ -121,18 +120,4 @@ export class VictoryPhase extends PokemonPhase { this.end(); } - - /** - * If this wave is a fixed battle with special custom modifier rewards, - * will pass those settings to the upcoming {@linkcode SelectModifierPhase}`. - */ - getFixedBattleCustomModifiers(): CustomModifierSettings | undefined { - const gameMode = globalScene.gameMode; - const waveIndex = globalScene.currentBattle.waveIndex; - if (gameMode.isFixedBattle(waveIndex)) { - return gameMode.getFixedBattle(waveIndex).customModifierRewardSettings; - } - - return undefined; - } } 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/api/pokerogue-session-savedata-api.ts b/src/plugins/api/pokerogue-session-savedata-api.ts index 4ffb0a5d8da..39fa292f9f1 100644 --- a/src/plugins/api/pokerogue-session-savedata-api.ts +++ b/src/plugins/api/pokerogue-session-savedata-api.ts @@ -56,15 +56,15 @@ export class PokerogueSessionSavedataApi extends ApiBase { /** * Update a session savedata. - * @param params The {@linkcode UpdateSessionSavedataRequest} to send - * @param rawSavedata The raw savedata (as `string`) + * @param params - The request to send + * @param rawSavedata - The raw, unencrypted savedata * @returns An error message if something went wrong */ - public async update(params: UpdateSessionSavedataRequest, rawSavedata: string) { + public async update(params: UpdateSessionSavedataRequest, rawSavedata: string): Promise { try { const urlSearchParams = this.toUrlSearchParams(params); - const response = await this.doPost(`/savedata/session/update?${urlSearchParams}`, rawSavedata); + const response = await this.doPost(`/savedata/session/update?${urlSearchParams}`, rawSavedata); return await response.text(); } catch (err) { console.warn("Could not update session savedata!", err); diff --git a/src/system/achv.ts b/src/system/achv.ts index 69eade02e35..f238acbda3a 100644 --- a/src/system/achv.ts +++ b/src/system/achv.ts @@ -13,6 +13,7 @@ import { PlayerGender } from "#enums/player-gender"; import { getShortenedStatKey, Stat } from "#enums/stat"; import { TurnHeldItemTransferModifier } from "#modifiers/modifier"; import type { ConditionFn } from "#types/common"; +import { isNuzlockeChallenge } from "#utils/challenge-utils"; import { NumberHolder } from "#utils/common"; import i18next from "i18next"; import type { Modifier } from "typescript"; @@ -447,6 +448,8 @@ export function getAchievementDescription(localizationKey: string): string { return i18next.t("achv:FLIP_STATS.description", { context: genderStr }); case "FLIP_INVERSE": return i18next.t("achv:FLIP_INVERSE.description", { context: genderStr }); + case "NUZLOCKE": + return i18next.t("achv:NUZLOCKE.description", { context: genderStr }); case "BREEDERS_IN_SPACE": return i18next.t("achv:BREEDERS_IN_SPACE.description", { context: genderStr, @@ -922,6 +925,8 @@ export const achvs = { c.value > 0 && globalScene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0), ).setSecret(), + // TODO: Decide on icon + NUZLOCKE: new ChallengeAchv("NUZLOCKE", "", "NUZLOCKE.description", "leaf_stone", 100, isNuzlockeChallenge), BREEDERS_IN_SPACE: new Achv("BREEDERS_IN_SPACE", "", "BREEDERS_IN_SPACE.description", "moon_stone", 50).setSecret(), }; diff --git a/src/system/game-data.ts b/src/system/game-data.ts index d899afa19ef..90cbf6e18cc 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -11,7 +11,6 @@ import { speciesEggMoves } from "#balance/egg-moves"; import { pokemonPrevolutions } from "#balance/pokemon-evolutions"; import { speciesStarterCosts } from "#balance/starters"; import { ArenaTrapTag } from "#data/arena-tag"; -import { applyChallenges } from "#data/challenge"; import { allMoves, allSpecies } from "#data/data-lists"; import type { Egg } from "#data/egg"; import { pokemonFormChanges } from "#data/pokemon-forms"; @@ -49,6 +48,7 @@ import { EggData } from "#system/egg-data"; import { GameStats } from "#system/game-stats"; import { ModifierData as PersistentModifierData } from "#system/modifier-data"; import { PokemonData } from "#system/pokemon-data"; +import { RibbonData } from "#system/ribbons/ribbon-data"; import { resetSettings, SettingKeys, setSetting } from "#system/settings"; import { SettingGamepad, setSettingGamepad, settingGamepadDefaults } from "#system/settings-gamepad"; import type { SettingKeyboard } from "#system/settings-keyboard"; @@ -63,6 +63,7 @@ import { VoucherType, vouchers } from "#system/voucher"; import { trainerConfigs } from "#trainers/trainer-config"; import type { DexData, DexEntry } from "#types/dex-data"; import { RUN_HISTORY_LIMIT } from "#ui/run-history-ui-handler"; +import { applyChallenges } from "#utils/challenge-utils"; import { executeIf, fixedInt, isLocal, NumberHolder, randInt, randSeedItem } from "#utils/common"; import { decrypt, encrypt } from "#utils/data"; import { getEnumKeys } from "#utils/enums"; @@ -127,6 +128,8 @@ export interface SessionSaveData { battleType: BattleType; trainer: TrainerData; gameVersion: string; + /** The player-chosen name of the run */ + name: string; timestamp: number; challenges: ChallengeData[]; mysteryEncounterType: MysteryEncounterType | -1; // Only defined when current wave is ME, @@ -206,10 +209,12 @@ export interface StarterData { [key: number]: StarterDataEntry; } -export interface TutorialFlags { - [key: string]: boolean; -} +// TODO: Rework into a bitmask +export type TutorialFlags = { + [key in Tutorial]: boolean; +}; +// TODO: Rework into a bitmask export interface SeenDialogues { [key: string]: boolean; } @@ -399,121 +404,121 @@ export class GameData { } public initSystem(systemDataStr: string, cachedSystemDataStr?: string): Promise { - return new Promise(resolve => { - try { - let systemData = this.parseSystemData(systemDataStr); + const { promise, resolve } = Promise.withResolvers(); + try { + let systemData = this.parseSystemData(systemDataStr); - if (cachedSystemDataStr) { - const cachedSystemData = this.parseSystemData(cachedSystemDataStr); - if (cachedSystemData.timestamp > systemData.timestamp) { - console.debug("Use cached system"); - systemData = cachedSystemData; - systemDataStr = cachedSystemDataStr; - } else { - this.clearLocalData(); - } - } - - console.debug(systemData); - - localStorage.setItem(`data_${loggedInUser?.username}`, encrypt(systemDataStr, bypassLogin)); - - const lsItemKey = `runHistoryData_${loggedInUser?.username}`; - const lsItem = localStorage.getItem(lsItemKey); - if (!lsItem) { - localStorage.setItem(lsItemKey, ""); - } - - applySystemVersionMigration(systemData); - - this.trainerId = systemData.trainerId; - this.secretId = systemData.secretId; - - this.gender = systemData.gender; - - this.saveSetting(SettingKeys.Player_Gender, systemData.gender === PlayerGender.FEMALE ? 1 : 0); - - if (!systemData.starterData) { - this.initStarterData(); - - if (systemData["starterMoveData"]) { - const starterMoveData = systemData["starterMoveData"]; - for (const s of Object.keys(starterMoveData)) { - this.starterData[s].moveset = starterMoveData[s]; - } - } - - if (systemData["starterEggMoveData"]) { - const starterEggMoveData = systemData["starterEggMoveData"]; - for (const s of Object.keys(starterEggMoveData)) { - this.starterData[s].eggMoves = starterEggMoveData[s]; - } - } - - this.migrateStarterAbilities(systemData, this.starterData); - - const starterIds = Object.keys(this.starterData).map(s => Number.parseInt(s) as SpeciesId); - for (const s of starterIds) { - this.starterData[s].candyCount += systemData.dexData[s].caughtCount; - this.starterData[s].candyCount += systemData.dexData[s].hatchedCount * 2; - if (systemData.dexData[s].caughtAttr & DexAttr.SHINY) { - this.starterData[s].candyCount += 4; - } - } + if (cachedSystemDataStr) { + const cachedSystemData = this.parseSystemData(cachedSystemDataStr); + if (cachedSystemData.timestamp > systemData.timestamp) { + console.debug("Use cached system"); + systemData = cachedSystemData; + systemDataStr = cachedSystemDataStr; } else { - this.starterData = systemData.starterData; + this.clearLocalData(); } - - if (systemData.gameStats) { - this.gameStats = systemData.gameStats; - } - - if (systemData.unlocks) { - for (const key of Object.keys(systemData.unlocks)) { - if (this.unlocks.hasOwnProperty(key)) { - this.unlocks[key] = systemData.unlocks[key]; - } - } - } - - if (systemData.achvUnlocks) { - for (const a of Object.keys(systemData.achvUnlocks)) { - if (achvs.hasOwnProperty(a)) { - this.achvUnlocks[a] = systemData.achvUnlocks[a]; - } - } - } - - if (systemData.voucherUnlocks) { - for (const v of Object.keys(systemData.voucherUnlocks)) { - if (vouchers.hasOwnProperty(v)) { - this.voucherUnlocks[v] = systemData.voucherUnlocks[v]; - } - } - } - - if (systemData.voucherCounts) { - getEnumKeys(VoucherType).forEach(key => { - const index = VoucherType[key]; - this.voucherCounts[index] = systemData.voucherCounts[index] || 0; - }); - } - - this.eggs = systemData.eggs ? systemData.eggs.map(e => e.toEgg()) : []; - - this.eggPity = systemData.eggPity ? systemData.eggPity.slice(0) : [0, 0, 0, 0]; - this.unlockPity = systemData.unlockPity ? systemData.unlockPity.slice(0) : [0, 0, 0, 0]; - - this.dexData = Object.assign(this.dexData, systemData.dexData); - this.consolidateDexData(this.dexData); - this.defaultDexData = null; - - resolve(true); - } catch (err) { - console.error(err); - resolve(false); } - }); + + console.debug(systemData); + + localStorage.setItem(`data_${loggedInUser?.username}`, encrypt(systemDataStr, bypassLogin)); + + const lsItemKey = `runHistoryData_${loggedInUser?.username}`; + const lsItem = localStorage.getItem(lsItemKey); + if (!lsItem) { + localStorage.setItem(lsItemKey, ""); + } + + applySystemVersionMigration(systemData); + + this.trainerId = systemData.trainerId; + this.secretId = systemData.secretId; + + this.gender = systemData.gender; + + this.saveSetting(SettingKeys.Player_Gender, systemData.gender === PlayerGender.FEMALE ? 1 : 0); + + if (!systemData.starterData) { + this.initStarterData(); + + if (systemData["starterMoveData"]) { + const starterMoveData = systemData["starterMoveData"]; + for (const s of Object.keys(starterMoveData)) { + this.starterData[s].moveset = starterMoveData[s]; + } + } + + if (systemData["starterEggMoveData"]) { + const starterEggMoveData = systemData["starterEggMoveData"]; + for (const s of Object.keys(starterEggMoveData)) { + this.starterData[s].eggMoves = starterEggMoveData[s]; + } + } + + this.migrateStarterAbilities(systemData, this.starterData); + + const starterIds = Object.keys(this.starterData).map(s => Number.parseInt(s) as SpeciesId); + for (const s of starterIds) { + this.starterData[s].candyCount += systemData.dexData[s].caughtCount; + this.starterData[s].candyCount += systemData.dexData[s].hatchedCount * 2; + if (systemData.dexData[s].caughtAttr & DexAttr.SHINY) { + this.starterData[s].candyCount += 4; + } + } + } else { + this.starterData = systemData.starterData; + } + + if (systemData.gameStats) { + this.gameStats = systemData.gameStats; + } + + if (systemData.unlocks) { + for (const key of Object.keys(systemData.unlocks)) { + if (this.unlocks.hasOwnProperty(key)) { + this.unlocks[key] = systemData.unlocks[key]; + } + } + } + + if (systemData.achvUnlocks) { + for (const a of Object.keys(systemData.achvUnlocks)) { + if (achvs.hasOwnProperty(a)) { + this.achvUnlocks[a] = systemData.achvUnlocks[a]; + } + } + } + + if (systemData.voucherUnlocks) { + for (const v of Object.keys(systemData.voucherUnlocks)) { + if (vouchers.hasOwnProperty(v)) { + this.voucherUnlocks[v] = systemData.voucherUnlocks[v]; + } + } + } + + if (systemData.voucherCounts) { + getEnumKeys(VoucherType).forEach(key => { + const index = VoucherType[key]; + this.voucherCounts[index] = systemData.voucherCounts[index] || 0; + }); + } + + this.eggs = systemData.eggs ? systemData.eggs.map(e => e.toEgg()) : []; + + this.eggPity = systemData.eggPity ? systemData.eggPity.slice(0) : [0, 0, 0, 0]; + this.unlockPity = systemData.unlockPity ? systemData.unlockPity.slice(0) : [0, 0, 0, 0]; + + this.dexData = Object.assign(this.dexData, systemData.dexData); + this.consolidateDexData(this.dexData); + this.defaultDexData = null; + + resolve(true); + } catch (err) { + console.error(err); + resolve(false); + } + return promise; } /** @@ -624,6 +629,9 @@ export class GameData { } return ret; } + if (k === "ribbons") { + return RibbonData.fromJSON(v); + } return k.endsWith("Attr") && !["natureAttr", "abilityAttr", "passiveAttr"].includes(k) ? BigInt(v ?? 0) : v; }) as SystemSaveData; @@ -822,52 +830,51 @@ export class GameData { return true; // TODO: is `true` the correct return value? } - private loadGamepadSettings(): boolean { - Object.values(SettingGamepad) - .map(setting => setting as SettingGamepad) - .forEach(setting => setSettingGamepad(setting, settingGamepadDefaults[setting])); + private loadGamepadSettings(): void { + Object.values(SettingGamepad).forEach(setting => { + setSettingGamepad(setting, settingGamepadDefaults[setting]); + }); if (!localStorage.hasOwnProperty("settingsGamepad")) { - return false; + return; } const settingsGamepad = JSON.parse(localStorage.getItem("settingsGamepad")!); // TODO: is this bang correct? for (const setting of Object.keys(settingsGamepad)) { setSettingGamepad(setting as SettingGamepad, settingsGamepad[setting]); } - - return true; // TODO: is `true` the correct return value? } - public saveTutorialFlag(tutorial: Tutorial, flag: boolean): boolean { - const key = getDataTypeKey(GameDataType.TUTORIALS); - let tutorials: object = {}; - if (localStorage.hasOwnProperty(key)) { - tutorials = JSON.parse(localStorage.getItem(key)!); // TODO: is this bang correct? + /** + * Save the specified tutorial as having the specified completion status. + * @param tutorial - The {@linkcode Tutorial} whose completion status is being saved + * @param status - The completion status to set + */ + public saveTutorialFlag(tutorial: Tutorial, status: boolean): void { + // Grab the prior save data tutorial + const saveDataKey = getDataTypeKey(GameDataType.TUTORIALS); + const tutorials: TutorialFlags = localStorage.hasOwnProperty(saveDataKey) + ? JSON.parse(localStorage.getItem(saveDataKey)!) + : {}; + + // TODO: We shouldn't be storing this like that + for (const key of Object.values(Tutorial)) { + if (key === tutorial) { + tutorials[key] = status; + } else { + tutorials[key] ??= false; + } } - Object.keys(Tutorial) - .map(t => t as Tutorial) - .forEach(t => { - const key = Tutorial[t]; - if (key === tutorial) { - tutorials[key] = flag; - } else { - tutorials[key] ??= false; - } - }); - - localStorage.setItem(key, JSON.stringify(tutorials)); - - return true; + localStorage.setItem(saveDataKey, JSON.stringify(tutorials)); } public getTutorialFlags(): TutorialFlags { const key = getDataTypeKey(GameDataType.TUTORIALS); - const ret: TutorialFlags = {}; - Object.values(Tutorial) - .map(tutorial => tutorial as Tutorial) - .forEach(tutorial => (ret[Tutorial[tutorial]] = false)); + const ret: TutorialFlags = Object.values(Tutorial).reduce((acc, tutorial) => { + acc[Tutorial[tutorial]] = false; + return acc; + }, {} as TutorialFlags); if (!localStorage.hasOwnProperty(key)) { return ret; @@ -979,6 +986,48 @@ export class GameData { }); } + async renameSession(slotId: number, newName: string): Promise { + if (slotId < 0) { + return false; + } + if (newName === "") { + return true; + } + const sessionData: SessionSaveData | null = await this.getSession(slotId); + + if (!sessionData) { + return false; + } + + sessionData.name = newName; + // update timestamp by 1 to ensure the session is saved + sessionData.timestamp += 1; + const updatedDataStr = JSON.stringify(sessionData); + const encrypted = encrypt(updatedDataStr, bypassLogin); + const secretId = this.secretId; + const trainerId = this.trainerId; + + if (bypassLogin) { + localStorage.setItem( + `sessionData${slotId ? slotId : ""}_${loggedInUser?.username}`, + encrypt(updatedDataStr, bypassLogin), + ); + return true; + } + + const response = await pokerogueApi.savedata.session.update( + { slot: slotId, trainerId, secretId, clientSessionId }, + updatedDataStr, + ); + + if (response) { + return false; + } + localStorage.setItem(`sessionData${slotId ? slotId : ""}_${loggedInUser?.username}`, encrypted); + const success = await updateUserInfo(); + return !(success !== null && !success); + } + loadSession(slotId: number, sessionData?: SessionSaveData): Promise { // biome-ignore lint/suspicious/noAsyncPromiseExecutor: TODO: fix this return new Promise(async (resolve, reject) => { @@ -1584,6 +1633,7 @@ export class GameData { caughtCount: 0, hatchedCount: 0, ivs: [0, 0, 0, 0, 0, 0], + ribbons: new RibbonData(0), }; } @@ -1828,6 +1878,12 @@ export class GameData { }); } + /** + * Increase the number of classic ribbons won with this species. + * @param species - The species to increment the ribbon count for + * @param forStarter - If true, will increment the ribbon count for the root species of the given species + * @returns The number of classic wins after incrementing. + */ incrementRibbonCount(species: PokemonSpecies, forStarter = false): number { const speciesIdToIncrement: SpeciesId = species.getRootSpeciesId(forStarter); @@ -2127,6 +2183,9 @@ export class GameData { if (!entry.hasOwnProperty("natureAttr") || (entry.caughtAttr && !entry.natureAttr)) { entry.natureAttr = this.defaultDexData?.[k].natureAttr || 1 << randInt(25, 1); } + if (!entry.hasOwnProperty("ribbons")) { + entry.ribbons = new RibbonData(0); + } } } diff --git a/src/system/ribbons/ribbon-data.ts b/src/system/ribbons/ribbon-data.ts new file mode 100644 index 00000000000..42c523afc0e --- /dev/null +++ b/src/system/ribbons/ribbon-data.ts @@ -0,0 +1,148 @@ +import type { Brander } from "#types/type-helpers"; + +export type RibbonFlag = (number & Brander<"RibbonFlag">) | 0; + +/** + * Class for ribbon data management. Usually constructed via the {@linkcode fromJSON} method. + * + * @remarks + * Stores information about the ribbons earned by a species using a bitfield. + */ +export class RibbonData { + /** Internal bitfield storing the unlock state for each ribbon */ + private payload: number; + + //#region Ribbons + //#region Monotype challenge ribbons + /** Ribbon for winning the normal monotype challenge */ + public static readonly MONO_NORMAL = 0x1 as RibbonFlag; + /** Ribbon for winning the fighting monotype challenge */ + public static readonly MONO_FIGHTING = 0x2 as RibbonFlag; + /** Ribbon for winning the flying monotype challenge */ + public static readonly MONO_FLYING = 0x4 as RibbonFlag; + /** Ribbon for winning the poision monotype challenge */ + public static readonly MONO_POISON = 0x8 as RibbonFlag; + /** Ribbon for winning the ground monotype challenge */ + public static readonly MONO_GROUND = 0x10 as RibbonFlag; + /** Ribbon for winning the rock monotype challenge */ + public static readonly MONO_ROCK = 0x20 as RibbonFlag; + /** Ribbon for winning the bug monotype challenge */ + public static readonly MONO_BUG = 0x40 as RibbonFlag; + /** Ribbon for winning the ghost monotype challenge */ + public static readonly MONO_GHOST = 0x80 as RibbonFlag; + /** Ribbon for winning the steel monotype challenge */ + public static readonly MONO_STEEL = 0x100 as RibbonFlag; + /** Ribbon for winning the fire monotype challenge */ + public static readonly MONO_FIRE = 0x200 as RibbonFlag; + /** Ribbon for winning the water monotype challenge */ + public static readonly MONO_WATER = 0x400 as RibbonFlag; + /** Ribbon for winning the grass monotype challenge */ + public static readonly MONO_GRASS = 0x800 as RibbonFlag; + /** Ribbon for winning the electric monotype challenge */ + public static readonly MONO_ELECTRIC = 0x1000 as RibbonFlag; + /** Ribbon for winning the psychic monotype challenge */ + public static readonly MONO_PSYCHIC = 0x2000 as RibbonFlag; + /** Ribbon for winning the ice monotype challenge */ + public static readonly MONO_ICE = 0x4000 as RibbonFlag; + /** Ribbon for winning the dragon monotype challenge */ + public static readonly MONO_DRAGON = 0x8000 as RibbonFlag; + /** Ribbon for winning the dark monotype challenge */ + public static readonly MONO_DARK = 0x10000 as RibbonFlag; + /** Ribbon for winning the fairy monotype challenge */ + public static readonly MONO_FAIRY = 0x20000 as RibbonFlag; + //#endregion Monotype ribbons + + //#region Monogen ribbons + /** Ribbon for winning the the mono gen 1 challenge */ + public static readonly MONO_GEN_1 = 0x40000 as RibbonFlag; + /** Ribbon for winning the the mono gen 2 challenge */ + public static readonly MONO_GEN_2 = 0x80000 as RibbonFlag; + /** Ribbon for winning the mono gen 3 challenge */ + public static readonly MONO_GEN_3 = 0x100000 as RibbonFlag; + /** Ribbon for winning the mono gen 4 challenge */ + public static readonly MONO_GEN_4 = 0x200000 as RibbonFlag; + /** Ribbon for winning the mono gen 5 challenge */ + public static readonly MONO_GEN_5 = 0x400000 as RibbonFlag; + /** Ribbon for winning the mono gen 6 challenge */ + public static readonly MONO_GEN_6 = 0x800000 as RibbonFlag; + /** Ribbon for winning the mono gen 7 challenge */ + public static readonly MONO_GEN_7 = 0x1000000 as RibbonFlag; + /** Ribbon for winning the mono gen 8 challenge */ + public static readonly MONO_GEN_8 = 0x2000000 as RibbonFlag; + /** Ribbon for winning the mono gen 9 challenge */ + public static readonly MONO_GEN_9 = 0x4000000 as RibbonFlag; + //#endregion Monogen ribbons + + /** Ribbon for winning classic */ + public static readonly CLASSIC = 0x8000000 as RibbonFlag; + /** Ribbon for winning the nuzzlocke challenge */ + public static readonly NUZLOCKE = 0x10000000 as RibbonFlag; + /** Ribbon for reaching max friendship */ + public static readonly FRIENDSHIP = 0x20000000 as RibbonFlag; + /** Ribbon for winning the flip stats challenge */ + public static readonly FLIP_STATS = 0x40000000 as RibbonFlag; + /** Ribbon for winning the inverse challenge */ + public static readonly INVERSE = 0x80000000 as RibbonFlag; + /** Ribbon for winning the fresh start challenge */ + public static readonly FRESH_START = 0x100000000 as RibbonFlag; + /** Ribbon for winning the hardcore challenge */ + public static readonly HARDCORE = 0x200000000 as RibbonFlag; + /** Ribbon for winning the limited catch challenge */ + public static readonly LIMITED_CATCH = 0x400000000 as RibbonFlag; + /** Ribbon for winning the limited support challenge set to no heal */ + public static readonly NO_HEAL = 0x800000000 as RibbonFlag; + /** Ribbon for winning the limited uspport challenge set to no shop */ + public static readonly NO_SHOP = 0x1000000000 as RibbonFlag; + /** Ribbon for winning the limited support challenge set to both*/ + public static readonly NO_SUPPORT = 0x2000000000 as RibbonFlag; + + // NOTE: max possible ribbon flag is 0x20000000000000 (53 total ribbons) + // Once this is exceeded, bitfield needs to be changed to a bigint or even a uint array + // Note that this has no impact on serialization as it is stored in hex. + + //#endregion Ribbons + + /** Create a new instance of RibbonData. Generally, {@linkcode fromJSON} is used instead. */ + constructor(value: number) { + this.payload = value; + } + + /** Serialize the bitfield payload as a hex encoded string */ + public toJSON(): string { + return this.payload.toString(16); + } + + /** + * Decode a hexadecimal string representation of the bitfield into a `RibbonData` instance + * + * @param value - Hexadecimal string representation of the bitfield (without the leading 0x) + * @returns A new instance of `RibbonData` initialized with the provided bitfield. + */ + public static fromJSON(value: string): RibbonData { + try { + return new RibbonData(Number.parseInt(value, 16)); + } catch { + return new RibbonData(0); + } + } + + /** + * Award one or more ribbons to the ribbon data by setting the corresponding flags in the bitfield. + * + * @param flags - The flags to set. Can be a single flag or multiple flags. + */ + public award(...flags: [RibbonFlag, ...RibbonFlag[]]): void { + for (const f of flags) { + this.payload |= f; + } + } + + /** + * Check if a specific ribbon has been awarded + * @param flag - The ribbon to check + * @returns Whether the specified flag has been awarded + */ + public has(flag: RibbonFlag): boolean { + return !!(this.payload & flag); + } +} diff --git a/src/system/ribbons/ribbon-methods.ts b/src/system/ribbons/ribbon-methods.ts new file mode 100644 index 00000000000..a465357ab8c --- /dev/null +++ b/src/system/ribbons/ribbon-methods.ts @@ -0,0 +1,20 @@ +import { globalScene } from "#app/global-scene"; +import { pokemonPrevolutions } from "#balance/pokemon-evolutions"; +import type { SpeciesId } from "#enums/species-id"; +import type { RibbonFlag } from "#system/ribbons/ribbon-data"; +import { isNullOrUndefined } from "#utils/common"; + +/** + * Award one or more ribbons to a species and its pre-evolutions + * + * @param id - The ID of the species to award ribbons to + * @param ribbons - The ribbon(s) to award (use bitwise OR to combine multiple) + */ +export function awardRibbonsToSpeciesLine(id: SpeciesId, ribbons: RibbonFlag): void { + const dexData = globalScene.gameData.dexData; + dexData[id].ribbons.award(ribbons); + // Mark all pre-evolutions of the Pokémon with the same ribbon flags. + for (let prevoId = pokemonPrevolutions[id]; !isNullOrUndefined(prevoId); prevoId = pokemonPrevolutions[prevoId]) { + dexData[id].ribbons.award(ribbons); + } +} diff --git a/src/system/settings/settings-gamepad.ts b/src/system/settings/settings-gamepad.ts index 2e25eda7300..c334159cc3c 100644 --- a/src/system/settings/settings-gamepad.ts +++ b/src/system/settings/settings-gamepad.ts @@ -144,7 +144,7 @@ export function setSettingGamepad(setting: SettingGamepad, value: number): boole handler: () => changeGamepadHandler(g), })), { - label: i18next.t("settings:cancelContollerChoice"), + label: i18next.t("settings:cancelControllerChoice"), handler: cancelHandler, }, ], diff --git a/src/timed-event-manager.ts b/src/timed-event-manager.ts index 9877f298404..ed92a1c9ca5 100644 --- a/src/timed-event-manager.ts +++ b/src/timed-event-manager.ts @@ -397,6 +397,16 @@ export class TimedEventManager { return timedEvents.some((te: TimedEvent) => this.isActive(te)); } + /** + * Check whether the current event is active and for April Fools. + * @returns Whether the April Fools event is currently active. + */ + isAprilFoolsActive(): boolean { + return timedEvents.some( + te => this.isActive(te) && te.hasOwnProperty("bannerKey") && te.bannerKey!.startsWith("aprf"), + ); + } + activeEventHasBanner(): boolean { const activeEvents = timedEvents.filter(te => this.isActive(te) && te.hasOwnProperty("bannerKey")); return activeEvents.length > 0; @@ -653,7 +663,7 @@ export class TimedEventDisplay extends Phaser.GameObjects.Container { console.log(this.event.bannerKey); const padding = 5; const showTimer = this.event.eventType !== EventType.NO_TIMER_DISPLAY; - const yPosition = globalScene.game.canvas.height / 6 - padding - (showTimer ? 10 : 0) - (this.event.yOffset ?? 0); + const yPosition = globalScene.scaledCanvas.height - padding - (showTimer ? 10 : 0) - (this.event.yOffset ?? 0); this.banner = new Phaser.GameObjects.Image(globalScene, this.availableWidth / 2, yPosition - padding, key); this.banner.setName("img-event-banner"); this.banner.setOrigin(0.5, 1); diff --git a/src/ui/abstact-option-select-ui-handler.ts b/src/ui/abstract-option-select-ui-handler.ts similarity index 99% rename from src/ui/abstact-option-select-ui-handler.ts rename to src/ui/abstract-option-select-ui-handler.ts index 2fb0159b6ef..b7279bc2d30 100644 --- a/src/ui/abstact-option-select-ui-handler.ts +++ b/src/ui/abstract-option-select-ui-handler.ts @@ -66,7 +66,7 @@ export abstract class AbstractOptionSelectUiHandler extends UiHandler { setup() { const ui = this.getUi(); - this.optionSelectContainer = globalScene.add.container(globalScene.game.canvas.width / 6 - 1, -48); + this.optionSelectContainer = globalScene.add.container(globalScene.scaledCanvas.width - 1, -48); this.optionSelectContainer.setName(`option-select-${this.mode ? UiMode[this.mode] : "UNKNOWN"}`); this.optionSelectContainer.setVisible(false); ui.add(this.optionSelectContainer); @@ -135,7 +135,7 @@ export abstract class AbstractOptionSelectUiHandler extends UiHandler { this.optionSelectText.setName("text-option-select"); this.optionSelectTextContainer.add(this.optionSelectText); this.optionSelectContainer.setPosition( - globalScene.game.canvas.width / 6 - 1 - (this.config?.xOffset || 0), + globalScene.scaledCanvas.width - 1 - (this.config?.xOffset || 0), -48 + (this.config?.yOffset || 0), ); this.optionSelectBg.width = Math.max(this.optionSelectText.displayWidth + 24, this.getWindowWidth()); diff --git a/src/ui/achv-bar.ts b/src/ui/achv-bar.ts index bb1ef95c9de..0f71bcbfde0 100644 --- a/src/ui/achv-bar.ts +++ b/src/ui/achv-bar.ts @@ -21,7 +21,7 @@ export class AchvBar extends Phaser.GameObjects.Container { public shown: boolean; constructor() { - super(globalScene, globalScene.game.canvas.width / 6, 0); + super(globalScene, globalScene.scaledCanvas.width, 0); this.playerGender = globalScene.gameData.gender; } @@ -118,7 +118,7 @@ export class AchvBar extends Phaser.GameObjects.Container { globalScene.tweens.add({ targets: this, - x: globalScene.game.canvas.width / 6 - this.bg.width / 2, + x: globalScene.scaledCanvas.width - this.bg.width / 2, duration: 500, ease: "Sine.easeOut", }); @@ -136,7 +136,7 @@ export class AchvBar extends Phaser.GameObjects.Container { globalScene.tweens.add({ targets: this, - x: globalScene.game.canvas.width / 6, + x: globalScene.scaledCanvas.width, duration: 500, ease: "Sine.easeIn", onComplete: () => { diff --git a/src/ui/achvs-ui-handler.ts b/src/ui/achvs-ui-handler.ts index 01fd1d45a61..2c04e24e0f2 100644 --- a/src/ui/achvs-ui-handler.ts +++ b/src/ui/achvs-ui-handler.ts @@ -72,9 +72,9 @@ export class AchvsUiHandler extends MessageUiHandler { const ui = this.getUi(); /** Width of the global canvas / 6 */ - const WIDTH = globalScene.game.canvas.width / 6; + const WIDTH = globalScene.scaledCanvas.width; /** Height of the global canvas / 6 */ - const HEIGHT = globalScene.game.canvas.height / 6; + const HEIGHT = globalScene.scaledCanvas.height; this.mainContainer = globalScene.add.container(1, -HEIGHT + 1); diff --git a/src/ui/arena-flyout.ts b/src/ui/arena-flyout.ts index d2a45646690..e243bef342e 100644 --- a/src/ui/arena-flyout.ts +++ b/src/ui/arena-flyout.ts @@ -36,7 +36,7 @@ interface ArenaEffectInfo { /** The enum string representation of the effect */ name: string; /** {@linkcode ArenaEffectType} type of effect */ - effecType: ArenaEffectType; + effectType: ArenaEffectType; /** The maximum duration set by the effect */ maxDuration: number; @@ -246,7 +246,7 @@ export class ArenaFlyout extends Phaser.GameObjects.Container { // Creates a proxy object to decide which text object needs to be updated let textObject: Phaser.GameObjects.Text; - switch (fieldEffectInfo.effecType) { + switch (fieldEffectInfo.effectType) { case ArenaEffectType.PLAYER: textObject = this.flyoutTextPlayer; break; @@ -300,7 +300,7 @@ export class ArenaFlyout extends Phaser.GameObjects.Container { const existingTrapTagIndex = isArenaTrapTag ? this.fieldEffectInfo.findIndex( - e => tagAddedEvent.arenaTagType === e.tagType && arenaEffectType === e.effecType, + e => tagAddedEvent.arenaTagType === e.tagType && arenaEffectType === e.effectType, ) : -1; let name: string = getFieldEffectText(ArenaTagType[tagAddedEvent.arenaTagType]); @@ -318,7 +318,7 @@ export class ArenaFlyout extends Phaser.GameObjects.Container { this.fieldEffectInfo.push({ name, - effecType: arenaEffectType, + effectType: arenaEffectType, maxDuration: tagAddedEvent.duration, duration: tagAddedEvent.duration, tagType: tagAddedEvent.arenaTagType, @@ -353,7 +353,7 @@ export class ArenaFlyout extends Phaser.GameObjects.Container { ? WeatherType[fieldEffectChangedEvent.newWeatherType] : TerrainType[fieldEffectChangedEvent.newTerrainType], ), - effecType: + effectType: fieldEffectChangedEvent instanceof WeatherChangedEvent ? ArenaEffectType.WEATHER : ArenaEffectType.TERRAIN, maxDuration: fieldEffectChangedEvent.duration, duration: fieldEffectChangedEvent.duration, diff --git a/src/ui/autocomplete-ui-handler.ts b/src/ui/autocomplete-ui-handler.ts index 6016245c38d..337b17048dc 100644 --- a/src/ui/autocomplete-ui-handler.ts +++ b/src/ui/autocomplete-ui-handler.ts @@ -1,6 +1,6 @@ import { Button } from "#enums/buttons"; import { UiMode } from "#enums/ui-mode"; -import { AbstractOptionSelectUiHandler } from "#ui/abstact-option-select-ui-handler"; +import { AbstractOptionSelectUiHandler } from "#ui/abstract-option-select-ui-handler"; export class AutoCompleteUiHandler extends AbstractOptionSelectUiHandler { modalContainer: Phaser.GameObjects.Container; diff --git a/src/ui/ball-ui-handler.ts b/src/ui/ball-ui-handler.ts index 67beb0eba84..99dabd893df 100644 --- a/src/ui/ball-ui-handler.ts +++ b/src/ui/ball-ui-handler.ts @@ -37,7 +37,7 @@ export class BallUiHandler extends UiHandler { const optionsText = addTextObject(0, 0, optionsTextContent, TextStyle.WINDOW, { align: "right", maxLines: 6 }); const optionsTextWidth = optionsText.displayWidth; this.pokeballSelectContainer = globalScene.add.container( - globalScene.game.canvas.width / 6 - 51 - Math.max(64, optionsTextWidth), + globalScene.scaledCanvas.width - 51 - Math.max(64, optionsTextWidth), -49, ); this.pokeballSelectContainer.setVisible(false); diff --git a/src/ui/base-stats-overlay.ts b/src/ui/base-stats-overlay.ts index e3ba472475a..3b432e13096 100644 --- a/src/ui/base-stats-overlay.ts +++ b/src/ui/base-stats-overlay.ts @@ -16,7 +16,6 @@ interface BaseStatsOverlaySettings { const HEIGHT = 120; const BORDER = 8; -const GLOBAL_SCALE = 6; const shortStats = ["HP", "ATK", "DEF", "SPATK", "SPDEF", "SPD"]; export class BaseStatsOverlay extends Phaser.GameObjects.Container implements InfoToggle { @@ -109,7 +108,7 @@ export class BaseStatsOverlay extends Phaser.GameObjects.Container implements In // width of this element static getWidth(_scale: number): number { - return globalScene.game.canvas.width / GLOBAL_SCALE / 2; + return globalScene.scaledCanvas.width / 2; } // height of this element diff --git a/src/ui/battle-info/player-battle-info.ts b/src/ui/battle-info/player-battle-info.ts index 62a2eddecb9..998f7cbb41f 100644 --- a/src/ui/battle-info/player-battle-info.ts +++ b/src/ui/battle-info/player-battle-info.ts @@ -39,7 +39,7 @@ export class PlayerBattleInfo extends BattleInfo { statOverflow: 1, }, }; - super(Math.floor(globalScene.game.canvas.width / 6) - 10, -72, true, posParams); + super(Math.floor(globalScene.scaledCanvas.width) - 10, -72, true, posParams); this.hpNumbersContainer = globalScene.add.container(-15, 10).setName("container_hp"); @@ -198,11 +198,11 @@ export class PlayerBattleInfo extends BattleInfo { this.lastLevelCapped = isLevelCapped; if (this.lastExp !== pokemon.exp || this.lastLevel !== pokemon.level) { - const durationMultipler = Math.max( + const durationMultiplier = Math.max( Phaser.Tweens.Builders.GetEaseFunction("Cubic.easeIn")(1 - Math.min(pokemon.level - this.lastLevel, 10) / 10), 0.1, ); - await this.updatePokemonExp(pokemon, false, durationMultipler); + await this.updatePokemonExp(pokemon, false, durationMultiplier); } else if (isLevelCapped !== oldLevelCapped) { this.setLevel(pokemon.level); } diff --git a/src/ui/battle-message-ui-handler.ts b/src/ui/battle-message-ui-handler.ts index b58897b9022..2ecca06172b 100644 --- a/src/ui/battle-message-ui-handler.ts +++ b/src/ui/battle-message-ui-handler.ts @@ -94,7 +94,7 @@ export class BattleMessageUiHandler extends MessageUiHandler { this.levelUpStatsContainer = levelUpStatsContainer; - const levelUpStatsLabelsContent = addTextObject(globalScene.game.canvas.width / 6 - 73, -94, "", TextStyle.WINDOW, { + const levelUpStatsLabelsContent = addTextObject(globalScene.scaledCanvas.width - 73, -94, "", TextStyle.WINDOW, { maxLines: 6, }); let levelUpStatsLabelText = ""; @@ -106,7 +106,7 @@ export class BattleMessageUiHandler extends MessageUiHandler { levelUpStatsLabelsContent.x -= levelUpStatsLabelsContent.displayWidth; const levelUpStatsBg = addWindow( - globalScene.game.canvas.width / 6, + globalScene.scaledCanvas.width, -100, 80 + levelUpStatsLabelsContent.displayWidth, 100, @@ -117,7 +117,7 @@ export class BattleMessageUiHandler extends MessageUiHandler { levelUpStatsContainer.add(levelUpStatsLabelsContent); const levelUpStatsIncrContent = addTextObject( - globalScene.game.canvas.width / 6 - 50, + globalScene.scaledCanvas.width - 50, -94, "+\n+\n+\n+\n+\n+", TextStyle.WINDOW, @@ -128,7 +128,7 @@ export class BattleMessageUiHandler extends MessageUiHandler { this.levelUpStatsIncrContent = levelUpStatsIncrContent; const levelUpStatsValuesContent = addBBCodeTextObject( - globalScene.game.canvas.width / 6 - 7, + globalScene.scaledCanvas.width - 7, -94, "", TextStyle.WINDOW, diff --git a/src/ui/candy-bar.ts b/src/ui/candy-bar.ts index 239b963227b..b29ac3ec520 100644 --- a/src/ui/candy-bar.ts +++ b/src/ui/candy-bar.ts @@ -19,7 +19,7 @@ export class CandyBar extends Phaser.GameObjects.Container { public shown: boolean; constructor() { - super(globalScene, globalScene.game.canvas.width / 6, -(globalScene.game.canvas.height / 6) + 15); + super(globalScene, globalScene.scaledCanvas.width, -globalScene.scaledCanvas.height + 15); } setup(): void { @@ -80,7 +80,7 @@ export class CandyBar extends Phaser.GameObjects.Container { this.tween = globalScene.tweens.add({ targets: this, - x: globalScene.game.canvas.width / 6 - (this.bg.width - 5), + x: globalScene.scaledCanvas.width - (this.bg.width - 5), duration: 500, ease: "Sine.easeOut", onComplete: () => { @@ -111,7 +111,7 @@ export class CandyBar extends Phaser.GameObjects.Container { this.tween = globalScene.tweens.add({ targets: this, - x: globalScene.game.canvas.width / 6, + x: globalScene.scaledCanvas.width, duration: 500, ease: "Sine.easeIn", onComplete: () => { diff --git a/src/ui/challenges-select-ui-handler.ts b/src/ui/challenges-select-ui-handler.ts index 4a7ab7641a3..b37ddcc6a5f 100644 --- a/src/ui/challenges-select-ui-handler.ts +++ b/src/ui/challenges-select-ui-handler.ts @@ -58,11 +58,11 @@ export class GameChallengesUiHandler extends UiHandler { this.widestTextBox = 0; - this.challengesContainer = globalScene.add.container(1, -(globalScene.game.canvas.height / 6) + 1); + this.challengesContainer = globalScene.add.container(1, -globalScene.scaledCanvas.height + 1); this.challengesContainer.setName("challenges"); this.challengesContainer.setInteractive( - new Phaser.Geom.Rectangle(0, 0, globalScene.game.canvas.width / 6, globalScene.game.canvas.height / 6), + new Phaser.Geom.Rectangle(0, 0, globalScene.scaledCanvas.width, globalScene.scaledCanvas.height), Phaser.Geom.Rectangle.Contains, ); @@ -79,7 +79,7 @@ export class GameChallengesUiHandler extends UiHandler { this.challengesContainer.add(bgOverlay); // TODO: Change this back to /9 when adding in difficulty - const headerBg = addWindow(0, 0, globalScene.game.canvas.width / 6, 24); + const headerBg = addWindow(0, 0, globalScene.scaledCanvas.width, 24); headerBg.setName("window-header-bg"); headerBg.setOrigin(0, 0); 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/char-sprite.ts b/src/ui/char-sprite.ts index 381421086ff..1ab00291ff6 100644 --- a/src/ui/char-sprite.ts +++ b/src/ui/char-sprite.ts @@ -10,7 +10,7 @@ export class CharSprite extends Phaser.GameObjects.Container { public shown: boolean; constructor() { - super(globalScene, globalScene.game.canvas.width / 6 + 32, -42); + super(globalScene, globalScene.scaledCanvas.width + 32, -42); } setup(): void { @@ -49,7 +49,7 @@ export class CharSprite extends Phaser.GameObjects.Container { globalScene.tweens.add({ targets: this, - x: globalScene.game.canvas.width / 6 - 102, + x: globalScene.scaledCanvas.width - 102, duration: 750, ease: "Cubic.easeOut", onComplete: () => { @@ -95,7 +95,7 @@ export class CharSprite extends Phaser.GameObjects.Container { globalScene.tweens.add({ targets: this, - x: globalScene.game.canvas.width / 6 + 32, + x: globalScene.scaledCanvas.width + 32, duration: 750, ease: "Cubic.easeIn", onComplete: () => { diff --git a/src/ui/command-ui-handler.ts b/src/ui/command-ui-handler.ts index 41ff559062a..b702bcd0803 100644 --- a/src/ui/command-ui-handler.ts +++ b/src/ui/command-ui-handler.ts @@ -42,7 +42,7 @@ export class CommandUiHandler extends UiHandler { ui.add(this.commandsContainer); this.teraButton = globalScene.add.sprite(-32, 15, "button_tera"); - this.teraButton.setName("terrastallize-button"); + this.teraButton.setName("terastallize-button"); this.teraButton.setScale(1.3); this.teraButton.setFrame("fire"); this.teraButton.setPipeline(globalScene.spritePipeline, { diff --git a/src/ui/confirm-ui-handler.ts b/src/ui/confirm-ui-handler.ts index b2f35931278..49e88556f1b 100644 --- a/src/ui/confirm-ui-handler.ts +++ b/src/ui/confirm-ui-handler.ts @@ -1,8 +1,8 @@ import { globalScene } from "#app/global-scene"; import { Button } from "#enums/buttons"; import { UiMode } from "#enums/ui-mode"; -import type { OptionSelectConfig } from "#ui/abstact-option-select-ui-handler"; -import { AbstractOptionSelectUiHandler } from "#ui/abstact-option-select-ui-handler"; +import type { OptionSelectConfig } from "#ui/abstract-option-select-ui-handler"; +import { AbstractOptionSelectUiHandler } from "#ui/abstract-option-select-ui-handler"; import i18next from "i18next"; export class ConfirmUiHandler extends AbstractOptionSelectUiHandler { @@ -69,7 +69,7 @@ export class ConfirmUiHandler extends AbstractOptionSelectUiHandler { const xOffset = args.length >= 7 && args[6] !== null ? (args[6] as number) : 0; const yOffset = args.length >= 8 && args[7] !== null ? (args[7] as number) : 0; - this.optionSelectContainer.setPosition(globalScene.game.canvas.width / 6 - 1 + xOffset, -48 + yOffset); + this.optionSelectContainer.setPosition(globalScene.scaledCanvas.width - 1 + xOffset, -48 + yOffset); this.setCursor(this.switchCheck ? this.switchCheckCursor : 0); return true; @@ -103,7 +103,7 @@ export class ConfirmUiHandler extends AbstractOptionSelectUiHandler { const xOffset = args.length >= 4 && args[3] !== null ? (args[3] as number) : 0; const yOffset = args.length >= 5 && args[4] !== null ? (args[4] as number) : 0; - this.optionSelectContainer.setPosition(globalScene.game.canvas.width / 6 - 1 + xOffset, -48 + yOffset); + this.optionSelectContainer.setPosition(globalScene.scaledCanvas.width - 1 + xOffset, -48 + yOffset); this.setCursor(this.switchCheck ? this.switchCheckCursor : 0); diff --git a/src/ui/egg-gacha-ui-handler.ts b/src/ui/egg-gacha-ui-handler.ts index 5dcf05e2606..0287e0ee7a5 100644 --- a/src/ui/egg-gacha-ui-handler.ts +++ b/src/ui/egg-gacha-ui-handler.ts @@ -174,7 +174,7 @@ export class EggGachaUiHandler extends MessageUiHandler { const ui = this.getUi(); - this.eggGachaContainer = globalScene.add.container(0, -globalScene.game.canvas.height / 6).setVisible(false); + this.eggGachaContainer = globalScene.add.container(0, -globalScene.scaledCanvas.height).setVisible(false); ui.add(this.eggGachaContainer); const bg = globalScene.add.nineslice(0, 0, "default_bg", undefined, 320, 180, 0, 0, 16, 0).setOrigin(0); @@ -212,7 +212,7 @@ export class EggGachaUiHandler extends MessageUiHandler { this.eggGachaOptionSelectBg = addWindow(0, 0, eggGachaOptionSelectWidth, 16 + 576 * this.scale).setOrigin(1); this.eggGachaOptionsContainer = globalScene.add - .container(globalScene.game.canvas.width / 6, 148) + .container(globalScene.scaledCanvas.width, 148) .add(this.eggGachaOptionSelectBg); this.eggGachaContainer.add(this.eggGachaOptionsContainer); @@ -278,7 +278,7 @@ export class EggGachaUiHandler extends MessageUiHandler { this.eggGachaContainer.add(this.eggGachaOptionsContainer); for (const voucher of getEnumValues(VoucherType)) { - const container = globalScene.add.container(globalScene.game.canvas.width / 6 - 56 * voucher, 0); + const container = globalScene.add.container(globalScene.scaledCanvas.width - 56 * voucher, 0); const bg = addWindow(0, 0, 56, 22).setOrigin(1, 0); container.add(bg); diff --git a/src/ui/egg-hatch-scene-handler.ts b/src/ui/egg-hatch-scene-handler.ts index 5b2c9d40cfa..6536ef2af80 100644 --- a/src/ui/egg-hatch-scene-handler.ts +++ b/src/ui/egg-hatch-scene-handler.ts @@ -19,7 +19,7 @@ export class EggHatchSceneHandler extends UiHandler { } setup() { - this.eggHatchContainer = globalScene.add.container(0, -globalScene.game.canvas.height / 6); + this.eggHatchContainer = globalScene.add.container(0, -globalScene.scaledCanvas.height); globalScene.fieldUI.add(this.eggHatchContainer); const eggLightraysAnimFrames = globalScene.anims.generateFrameNames("egg_lightrays", { start: 0, end: 3 }); diff --git a/src/ui/egg-list-ui-handler.ts b/src/ui/egg-list-ui-handler.ts index 42f969b9d38..2516903f631 100644 --- a/src/ui/egg-list-ui-handler.ts +++ b/src/ui/egg-list-ui-handler.ts @@ -36,11 +36,11 @@ export class EggListUiHandler extends MessageUiHandler { setup() { const ui = this.getUi(); - this.eggListContainer = globalScene.add.container(0, -globalScene.game.canvas.height / 6).setVisible(false); + this.eggListContainer = globalScene.add.container(0, -globalScene.scaledCanvas.height).setVisible(false); ui.add(this.eggListContainer); const bgColor = globalScene.add - .rectangle(0, 0, globalScene.game.canvas.width / 6, globalScene.game.canvas.height / 6, 0x006860) + .rectangle(0, 0, globalScene.scaledCanvas.width, globalScene.scaledCanvas.height, 0x006860) .setOrigin(0); const eggListBg = globalScene.add.image(0, 0, "egg_list_bg").setOrigin(0); @@ -69,9 +69,7 @@ export class EggListUiHandler extends MessageUiHandler { .withUpdateGridCallBack(() => this.updateEggIcons()) .withUpdateSingleElementCallback((i: number) => this.setEggDetails(i)); - this.eggListMessageBoxContainer = globalScene.add - .container(0, globalScene.game.canvas.height / 6) - .setVisible(false); + this.eggListMessageBoxContainer = globalScene.add.container(0, globalScene.scaledCanvas.height).setVisible(false); const eggListMessageBox = addWindow(1, -1, 318, 28).setOrigin(0, 1); this.eggListMessageBoxContainer.add(eggListMessageBox); diff --git a/src/ui/egg-summary-ui-handler.ts b/src/ui/egg-summary-ui-handler.ts index aa4e8974318..c66075dd910 100644 --- a/src/ui/egg-summary-ui-handler.ts +++ b/src/ui/egg-summary-ui-handler.ts @@ -59,11 +59,11 @@ export class EggSummaryUiHandler extends MessageUiHandler { setup() { const ui = this.getUi(); - this.summaryContainer = globalScene.add.container(0, -globalScene.game.canvas.height / 6); + this.summaryContainer = globalScene.add.container(0, -globalScene.scaledCanvas.height); this.summaryContainer.setVisible(false); ui.add(this.summaryContainer); - this.eggHatchContainer = globalScene.add.container(0, -globalScene.game.canvas.height / 6); + this.eggHatchContainer = globalScene.add.container(0, -globalScene.scaledCanvas.height); this.eggHatchContainer.setVisible(false); ui.add(this.eggHatchContainer); @@ -92,7 +92,7 @@ export class EggSummaryUiHandler extends MessageUiHandler { iconContainerX + numCols * iconSize, iconContainerY + 3, 4, - globalScene.game.canvas.height / 6 - 20, + globalScene.scaledCanvas.height - 20, numRows, ); this.summaryContainer.add(scrollBar); diff --git a/src/ui/evolution-scene-handler.ts b/src/ui/evolution-scene-handler.ts index c22cf31faaa..0333594dc36 100644 --- a/src/ui/evolution-scene-handler.ts +++ b/src/ui/evolution-scene-handler.ts @@ -22,7 +22,7 @@ export class EvolutionSceneHandler extends MessageUiHandler { const ui = this.getUi(); - this.evolutionContainer = globalScene.add.container(0, -globalScene.game.canvas.height / 6); + this.evolutionContainer = globalScene.add.container(0, -globalScene.scaledCanvas.height); const messageBg = globalScene.add.sprite(0, 0, "bg", globalScene.windowType).setOrigin(0, 1).setVisible(false); diff --git a/src/ui/fight-ui-handler.ts b/src/ui/fight-ui-handler.ts index 42f8cba5df4..1d856079939 100644 --- a/src/ui/fight-ui-handler.ts +++ b/src/ui/fight-ui-handler.ts @@ -105,15 +105,13 @@ export class FightUiHandler extends UiHandler implements InfoToggle { ]); // prepare move overlay - const overlayScale = 1; this.moveInfoOverlay = new MoveInfoOverlay({ delayVisibility: true, - scale: overlayScale, onSide: true, right: true, x: 0, - y: -MoveInfoOverlay.getHeight(overlayScale, true), - width: globalScene.game.canvas.width / 6 + 4, + y: -MoveInfoOverlay.getHeight(true), + width: globalScene.scaledCanvas.width + 4, hideEffectBox: true, hideBg: true, }); diff --git a/src/ui/filter-text.ts b/src/ui/filter-text.ts index ff7119dd778..d5809292c25 100644 --- a/src/ui/filter-text.ts +++ b/src/ui/filter-text.ts @@ -62,7 +62,7 @@ export class FilterText extends Phaser.GameObjects.Container { this.dialogueMessageBox = addWindow( -this.textPadding, 0, - globalScene.game.canvas.width / 6 + this.textPadding * 2, + globalScene.scaledCanvas.width + this.textPadding * 2, 49, false, false, 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/login-form-ui-handler.ts b/src/ui/login-form-ui-handler.ts index 524eaeece86..0f55faba5c4 100644 --- a/src/ui/login-form-ui-handler.ts +++ b/src/ui/login-form-ui-handler.ts @@ -2,7 +2,7 @@ import { pokerogueApi } from "#api/pokerogue-api"; import { globalScene } from "#app/global-scene"; import { TextStyle } from "#enums/text-style"; import { UiMode } from "#enums/ui-mode"; -import type { OptionSelectItem } from "#ui/abstact-option-select-ui-handler"; +import type { OptionSelectItem } from "#ui/abstract-option-select-ui-handler"; 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"; @@ -49,7 +49,7 @@ export class LoginFormUiHandler extends FormModalUiHandler { private buildExternalPartyContainer() { this.externalPartyContainer = globalScene.add.container(0, 0); this.externalPartyContainer.setInteractive( - new Phaser.Geom.Rectangle(0, 0, globalScene.game.canvas.width / 12, globalScene.game.canvas.height / 12), + new Phaser.Geom.Rectangle(0, 0, globalScene.scaledCanvas.width / 2, globalScene.scaledCanvas.height / 2), Phaser.Geom.Rectangle.Contains, ); this.externalPartyTitle = addTextObject(0, 4, "", TextStyle.SETTINGS_LABEL); diff --git a/src/ui/menu-ui-handler.ts b/src/ui/menu-ui-handler.ts index fa65cccab2f..da6bc9ced78 100644 --- a/src/ui/menu-ui-handler.ts +++ b/src/ui/menu-ui-handler.ts @@ -7,7 +7,7 @@ import { Button } from "#enums/buttons"; import { GameDataType } from "#enums/game-data-type"; import { TextStyle } from "#enums/text-style"; import { UiMode } from "#enums/ui-mode"; -import type { OptionSelectConfig, OptionSelectItem } from "#ui/abstact-option-select-ui-handler"; +import type { OptionSelectConfig, OptionSelectItem } from "#ui/abstract-option-select-ui-handler"; import { AdminMode, getAdminModeName } from "#ui/admin-ui-handler"; import type { AwaitableUiHandler } from "#ui/awaitable-ui-handler"; import { BgmBar } from "#ui/bgm-bar"; @@ -96,10 +96,10 @@ export class MenuUiHandler extends MessageUiHandler { ui.bgmBar = this.bgmBar; - this.menuContainer = globalScene.add.container(1, -(globalScene.game.canvas.height / 6) + 1); + this.menuContainer = globalScene.add.container(1, -globalScene.scaledCanvas.height + 1); this.menuContainer.setName("menu"); this.menuContainer.setInteractive( - new Phaser.Geom.Rectangle(0, 0, globalScene.game.canvas.width / 6, globalScene.game.canvas.height / 6), + new Phaser.Geom.Rectangle(0, 0, globalScene.scaledCanvas.width, globalScene.scaledCanvas.height), Phaser.Geom.Rectangle.Contains, ); @@ -146,10 +146,10 @@ export class MenuUiHandler extends MessageUiHandler { this.scale = getTextStyleOptions(TextStyle.WINDOW, globalScene.uiTheme).scale; this.menuBg = addWindow( - globalScene.game.canvas.width / 6 - (this.optionSelectText.displayWidth + 25), + globalScene.scaledCanvas.width - (this.optionSelectText.displayWidth + 25), 0, this.optionSelectText.displayWidth + 19 + 24 * this.scale, - globalScene.game.canvas.height / 6 - 2, + globalScene.scaledCanvas.height - 2, ); this.menuBg.setOrigin(0, 0); @@ -174,7 +174,7 @@ export class MenuUiHandler extends MessageUiHandler { this.dialogueMessageBox = addWindow( -this.textPadding, 0, - globalScene.game.canvas.width / 6 + this.textPadding * 2, + globalScene.scaledCanvas.width + this.textPadding * 2, 49, false, false, @@ -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..51a6a21a29c 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 { @@ -46,7 +46,7 @@ export abstract class ModalUiHandler extends UiHandler { this.modalContainer = globalScene.add.container(0, 0); this.modalContainer.setInteractive( - new Phaser.Geom.Rectangle(0, 0, globalScene.game.canvas.width / 6, globalScene.game.canvas.height / 6), + new Phaser.Geom.Rectangle(0, 0, globalScene.scaledCanvas.width, globalScene.scaledCanvas.height), Phaser.Geom.Rectangle.Contains, ); @@ -105,8 +105,8 @@ export abstract class ModalUiHandler extends UiHandler { const overlay = globalScene.add.rectangle( (this.getWidth() + marginLeft + marginRight) / 2, (this.getHeight() + marginTop + marginBottom) / 2, - globalScene.game.canvas.width / 6, - globalScene.game.canvas.height / 6, + globalScene.scaledCanvas.width, + globalScene.scaledCanvas.height, 0, ); overlay.setOrigin(0.5, 0.5); @@ -159,8 +159,8 @@ export abstract class ModalUiHandler extends UiHandler { const width = this.getWidth(config); const height = this.getHeight(config); this.modalContainer.setPosition( - (globalScene.game.canvas.width / 6 - (width + (marginRight - marginLeft))) / 2, - (-globalScene.game.canvas.height / 6 - (height + (marginBottom - marginTop))) / 2, + (globalScene.scaledCanvas.width - (width + (marginRight - marginLeft))) / 2, + (-globalScene.scaledCanvas.height - (height + (marginBottom - marginTop))) / 2, ); this.modalBg.setSize(width, height); diff --git a/src/ui/modifier-select-ui-handler.ts b/src/ui/modifier-select-ui-handler.ts index 16eecf6993d..a070b522050 100644 --- a/src/ui/modifier-select-ui-handler.ts +++ b/src/ui/modifier-select-ui-handler.ts @@ -86,10 +86,7 @@ export class ModifierSelectUiHandler extends AwaitableUiHandler { transferButtonText.setOrigin(1, 0); this.transferButtonContainer.add(transferButtonText); - this.checkButtonContainer = globalScene.add.container( - globalScene.game.canvas.width / 6 - 1, - OPTION_BUTTON_YPOSITION, - ); + this.checkButtonContainer = globalScene.add.container(globalScene.scaledCanvas.width - 1, OPTION_BUTTON_YPOSITION); this.checkButtonContainer.setName("use-btn"); this.checkButtonContainer.setVisible(false); ui.add(this.checkButtonContainer); @@ -129,8 +126,8 @@ export class ModifierSelectUiHandler extends AwaitableUiHandler { this.lockRarityButtonContainer.add(this.lockRarityButtonText); this.continueButtonContainer = globalScene.add.container( - globalScene.game.canvas.width / 12, - -(globalScene.game.canvas.height / 12), + globalScene.scaledCanvas.width / 2, + -(globalScene.scaledCanvas.height / 2), ); this.continueButtonContainer.setVisible(false); ui.add(this.continueButtonContainer); @@ -146,15 +143,13 @@ export class ModifierSelectUiHandler extends AwaitableUiHandler { this.continueButtonContainer.add(continueButtonText); // prepare move overlay - const overlayScale = 1; this.moveInfoOverlay = new MoveInfoOverlay({ delayVisibility: true, - scale: overlayScale, onSide: true, right: true, x: 1, - y: -MoveInfoOverlay.getHeight(overlayScale, true) - 1, - width: globalScene.game.canvas.width / 6 - 2, + y: -MoveInfoOverlay.getHeight(true) - 1, + width: globalScene.scaledCanvas.width - 2, }); ui.add(this.moveInfoOverlay); // register the overlay to receive toggle events @@ -209,20 +204,20 @@ export class ModifierSelectUiHandler extends AwaitableUiHandler { this.updateRerollCostText(); const typeOptions = args[1] as ModifierTypeOption[]; - const removeHealShop = globalScene.gameMode.hasNoShop; + const hasShop = globalScene.gameMode.getShopStatus(); const baseShopCost = new NumberHolder(globalScene.getWaveMoneyAmount(1)); globalScene.applyModifier(HealShopCostModifier, true, baseShopCost); - const shopTypeOptions = !removeHealShop + const shopTypeOptions = hasShop ? getPlayerShopModifierTypeOptionsForWave(globalScene.currentBattle.waveIndex, baseShopCost.value) : []; const optionsYOffset = shopTypeOptions.length > SHOP_OPTIONS_ROW_LIMIT ? -SINGLE_SHOP_ROW_YOFFSET : -DOUBLE_SHOP_ROW_YOFFSET; for (let m = 0; m < typeOptions.length; m++) { - const sliceWidth = globalScene.game.canvas.width / 6 / (typeOptions.length + 2); + const sliceWidth = globalScene.scaledCanvas.width / (typeOptions.length + 2); const option = new ModifierOption( sliceWidth * (m + 1) + sliceWidth * 0.5, - -globalScene.game.canvas.height / 12 + optionsYOffset, + -globalScene.scaledCanvas.height / 2 + optionsYOffset, typeOptions[m], ); option.setScale(0.5); @@ -243,10 +238,10 @@ export class ModifierSelectUiHandler extends AwaitableUiHandler { row ? SHOP_OPTIONS_ROW_LIMIT : 0, row ? undefined : SHOP_OPTIONS_ROW_LIMIT, ); - const sliceWidth = globalScene.game.canvas.width / 6 / (rowOptions.length + 2); + const sliceWidth = globalScene.scaledCanvas.width / (rowOptions.length + 2); const option = new ModifierOption( sliceWidth * (col + 1) + sliceWidth * 0.5, - -globalScene.game.canvas.height / 12 - globalScene.game.canvas.height / 32 - (42 - (28 * row - 1)), + -globalScene.scaledCanvas.height / 2 - globalScene.game.canvas.height / 32 - (42 - (28 * row - 1)), shopTypeOptions[m], ); option.setScale(0.375); @@ -370,7 +365,7 @@ export class ModifierSelectUiHandler extends AwaitableUiHandler { if (globalScene.shopCursorTarget === ShopCursorTarget.CHECK_TEAM) { this.setRowCursor(0); this.setCursor(2); - } else if (globalScene.shopCursorTarget === ShopCursorTarget.SHOP && globalScene.gameMode.hasNoShop) { + } else if (globalScene.shopCursorTarget === ShopCursorTarget.SHOP && !hasShop) { this.setRowCursor(ShopCursorTarget.REWARDS); this.setCursor(0); } else { @@ -558,27 +553,27 @@ export class ModifierSelectUiHandler extends AwaitableUiHandler { // Continue button when no shop items this.cursorObj.setScale(1.25); this.cursorObj.setPosition( - globalScene.game.canvas.width / 18 + 23, - -globalScene.game.canvas.height / 12 - + globalScene.scaledCanvas.width / 3 + 23, + -globalScene.scaledCanvas.height / 2 - (this.shopOptionsRows.length > 1 ? SINGLE_SHOP_ROW_YOFFSET - 2 : DOUBLE_SHOP_ROW_YOFFSET - 2), ); ui.showText(i18next.t("modifierSelectUiHandler:continueNextWaveDescription")); return ret; } - const sliceWidth = globalScene.game.canvas.width / 6 / (options.length + 2); + const sliceWidth = globalScene.scaledCanvas.width / (options.length + 2); if (this.rowCursor < 2) { // Cursor on free items this.cursorObj.setPosition( sliceWidth * (cursor + 1) + sliceWidth * 0.5 - 20, - -globalScene.game.canvas.height / 12 - + -globalScene.scaledCanvas.height / 2 - (this.shopOptionsRows.length > 1 ? SINGLE_SHOP_ROW_YOFFSET - 2 : DOUBLE_SHOP_ROW_YOFFSET - 2), ); } else { // Cursor on paying items this.cursorObj.setPosition( sliceWidth * (cursor + 1) + sliceWidth * 0.5 - 16, - -globalScene.game.canvas.height / 12 - + -globalScene.scaledCanvas.height / 2 - globalScene.game.canvas.height / 32 - (-14 + 28 * (this.rowCursor - (this.shopOptionsRows.length - 1))), ); @@ -848,7 +843,7 @@ class ModifierOption extends Phaser.GameObjects.Container { /** * Start the tweens responsible for animating the option's appearance * - * @privateremarks + * @privateRemarks * This method is unusual. It "returns" (one via the actual return, one by via appending to the `promiseHolder` * parameter) two promises. The promise returned by the method resolves once the option's appearance animations have * completed, and is meant to allow callers to synchronize with the completion of the option's appearance animations. diff --git a/src/ui/move-info-overlay.ts b/src/ui/move-info-overlay.ts index f8632eb244e..f98630260db 100644 --- a/src/ui/move-info-overlay.ts +++ b/src/ui/move-info-overlay.ts @@ -10,17 +10,24 @@ import { fixedInt, getLocalizedSpriteKey } from "#utils/common"; import i18next from "i18next"; export interface MoveInfoOverlaySettings { - delayVisibility?: boolean; // if true, showing the overlay will only set it to active and populate the fields and the handler using this field has to manually call setVisible later. - scale?: number; // scale the box? A scale of 0.5 is recommended - top?: boolean; // should the effect box be on top? - right?: boolean; // should the effect box be on the right? - onSide?: boolean; // should the effect be on the side? ignores top argument if true - //location and width of the component; unaffected by scaling + /** + * If true, showing the overlay will only set it to active and populate the fields + * and the handler using this field has to manually call `setVisible` later. + */ + delayVisibility?: boolean; + /** Whether the effect box should be on top */ + top?: boolean; + /** Whether the effect box should be on the right */ + right?: boolean; + /** Whether the effect box should be on the side. Overrides the `top` param if `true`. */ + onSide?: boolean; + /** `x` position of the component, unaffected by scaling */ x?: number; + /** `y` position of the component, unaffected by scaling */ y?: number; - /** Default is always half the screen, regardless of scale */ + /** Width of the component, unaffected by scaling. Defaults to half the screen width. */ width?: number; - /** Determines whether to display the small secondary box */ + /** Whether to display the small secondary box */ hideEffectBox?: boolean; hideBg?: boolean; } @@ -54,12 +61,11 @@ export class MoveInfoOverlay extends Phaser.GameObjects.Container implements Inf options.top = false; } super(globalScene, options?.x, options?.y); - const scale = options?.scale || 1; // set up the scale - this.setScale(scale); + this.setScale(1); this.options = options || {}; // prepare the description box - const width = (options?.width || MoveInfoOverlay.getWidth(scale)) / scale; // divide by scale as we always want this to be half a window wide + const width = options?.width || MoveInfoOverlay.getWidth(); // we always want this to be half a window wide this.descBg = addWindow( options?.onSide && !options?.right ? EFF_WIDTH : 0, options?.top ? EFF_HEIGHT : 0, @@ -88,19 +94,19 @@ export class MoveInfoOverlay extends Phaser.GameObjects.Container implements Inf y: options?.y || 0, }; if (maskPointOrigin.x < 0) { - maskPointOrigin.x += globalScene.game.canvas.width / GLOBAL_SCALE; + maskPointOrigin.x += globalScene.scaledCanvas.width; } if (maskPointOrigin.y < 0) { - maskPointOrigin.y += globalScene.game.canvas.height / GLOBAL_SCALE; + maskPointOrigin.y += globalScene.scaledCanvas.height; } const moveDescriptionTextMaskRect = globalScene.make.graphics(); moveDescriptionTextMaskRect.fillStyle(0xff0000); moveDescriptionTextMaskRect.fillRect( - maskPointOrigin.x + ((options?.onSide && !options?.right ? EFF_WIDTH : 0) + BORDER) * scale, - maskPointOrigin.y + ((options?.top ? EFF_HEIGHT : 0) + BORDER - 2) * scale, - width - ((options?.onSide ? EFF_WIDTH : 0) - BORDER * 2) * scale, - (DESC_HEIGHT - (BORDER - 2) * 2) * scale, + maskPointOrigin.x + ((options?.onSide && !options?.right ? EFF_WIDTH : 0) + BORDER), + maskPointOrigin.y + ((options?.top ? EFF_HEIGHT : 0) + BORDER - 2), + width - ((options?.onSide ? EFF_WIDTH : 0) - BORDER * 2), + DESC_HEIGHT - (BORDER - 2) * 2, ); moveDescriptionTextMaskRect.setScale(6); const moveDescriptionTextMask = this.createGeometryMask(moveDescriptionTextMaskRect); @@ -233,12 +239,12 @@ export class MoveInfoOverlay extends Phaser.GameObjects.Container implements Inf } // width of this element - static getWidth(_scale: number): number { - return globalScene.game.canvas.width / GLOBAL_SCALE / 2; + static getWidth(): number { + return globalScene.scaledCanvas.width / 2; } // height of this element - static getHeight(scale: number, onSide?: boolean): number { - return (onSide ? Math.max(EFF_HEIGHT, DESC_HEIGHT) : EFF_HEIGHT + DESC_HEIGHT) * scale; + static getHeight(onSide?: boolean): number { + return onSide ? Math.max(EFF_HEIGHT, DESC_HEIGHT) : EFF_HEIGHT + DESC_HEIGHT; } } diff --git a/src/ui/mystery-encounter-ui-handler.ts b/src/ui/mystery-encounter-ui-handler.ts index b6bc464855c..881c375fa8a 100644 --- a/src/ui/mystery-encounter-ui-handler.ts +++ b/src/ui/mystery-encounter-ui-handler.ts @@ -471,7 +471,7 @@ export class MysteryEncounterUiHandler extends UiHandler { // View Party Button const viewPartyText = addBBCodeTextObject( - globalScene.game.canvas.width / 6, + globalScene.scaledCanvas.width, -24, getBBCodeFrag(i18next.t("mysteryEncounterMessages:view_party_button"), TextStyle.PARTY), TextStyle.PARTY, diff --git a/src/ui/party-exp-bar.ts b/src/ui/party-exp-bar.ts index 952a1f8227a..c9567ceb042 100644 --- a/src/ui/party-exp-bar.ts +++ b/src/ui/party-exp-bar.ts @@ -14,7 +14,7 @@ export class PartyExpBar extends Phaser.GameObjects.Container { public shown: boolean; constructor() { - super(globalScene, globalScene.game.canvas.width / 6, -(globalScene.game.canvas.height / 6) + 15); + super(globalScene, globalScene.scaledCanvas.width, -globalScene.scaledCanvas.height + 15); } setup(): void { @@ -66,7 +66,7 @@ export class PartyExpBar extends Phaser.GameObjects.Container { this.tween = globalScene.tweens.add({ targets: this, - x: globalScene.game.canvas.width / 6 - (this.bg.width - 5), + x: globalScene.scaledCanvas.width - (this.bg.width - 5), duration: 500 / Math.pow(2, globalScene.expGainsSpeed), ease: "Sine.easeOut", onComplete: () => { @@ -92,7 +92,7 @@ export class PartyExpBar extends Phaser.GameObjects.Container { this.tween = globalScene.tweens.add({ targets: this, - x: globalScene.game.canvas.width / 6, + x: globalScene.scaledCanvas.width, duration: 500, ease: "Sine.easeIn", onComplete: () => { diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index 0337e487200..3101f46f098 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -1,7 +1,6 @@ import { globalScene } from "#app/global-scene"; import { getPokemonNameWithAffix } from "#app/messages"; import { pokemonEvolutions } from "#balance/pokemon-evolutions"; -import { applyChallenges } from "#data/challenge"; import { allMoves } from "#data/data-lists"; import { SpeciesFormChangeItemTrigger } from "#data/form-change-triggers"; import { Gender, getGenderColor, getGenderSymbol } from "#data/gender"; @@ -26,11 +25,17 @@ import { MoveInfoOverlay } from "#ui/move-info-overlay"; import { PokemonIconAnimHandler, PokemonIconAnimMode } from "#ui/pokemon-icon-anim-handler"; import { addBBCodeTextObject, addTextObject, getTextColor } from "#ui/text"; import { addWindow } from "#ui/ui-theme"; +import { applyChallenges } from "#utils/challenge-utils"; import { BooleanHolder, getLocalizedSpriteKey, randInt } from "#utils/common"; import { toTitleCase } from "#utils/strings"; import i18next from "i18next"; import type BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; +const DISCARD_BUTTON_X = 60; +const DISCARD_BUTTON_X_DOUBLES = 64; +const DISCARD_BUTTON_Y = -73; +const DISCARD_BUTTON_Y_DOUBLES = -58; + const defaultMessage = i18next.t("partyUiHandler:choosePokemon"); /** @@ -301,7 +306,7 @@ export class PartyUiHandler extends MessageUiHandler { const partyMessageText = addTextObject(10, 8, defaultMessage, TextStyle.WINDOW, { maxLines: 2 }); partyMessageText.setName("text-party-msg"); - partyMessageText.setOrigin(0, 0); + partyMessageText.setOrigin(0); partyMessageBoxContainer.add(partyMessageText); this.message = partyMessageText; @@ -311,26 +316,22 @@ export class PartyUiHandler extends MessageUiHandler { this.partyCancelButton = partyCancelButton; - this.optionsContainer = globalScene.add.container(globalScene.game.canvas.width / 6 - 1, -1); + this.optionsContainer = globalScene.add.container(globalScene.scaledCanvas.width - 1, -1); partyContainer.add(this.optionsContainer); this.iconAnimHandler = new PokemonIconAnimHandler(); this.iconAnimHandler.setup(); - const partyDiscardModeButton = new PartyDiscardModeButton(60, -globalScene.game.canvas.height / 15 - 1, this); - + const partyDiscardModeButton = new PartyDiscardModeButton(DISCARD_BUTTON_X, DISCARD_BUTTON_Y, 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; + // prepare move overlay this.moveInfoOverlay = new MoveInfoOverlay({ - scale: overlayScale, top: true, x: 1, - y: -MoveInfoOverlay.getHeight(overlayScale) - 1, - width: globalScene.game.canvas.width / 12 - 30, + y: -MoveInfoOverlay.getHeight() - 1, + width: globalScene.scaledCanvas.width / 2 - 30, }); ui.add(this.moveInfoOverlay); @@ -1235,7 +1236,7 @@ export class PartyUiHandler extends MessageUiHandler { } if (!this.optionsCursorObj) { this.optionsCursorObj = globalScene.add.image(0, 0, "cursor"); - this.optionsCursorObj.setOrigin(0, 0); + this.optionsCursorObj.setOrigin(0); this.optionsContainer.add(this.optionsCursorObj); } this.optionsCursorObj.setPosition( @@ -1607,7 +1608,7 @@ export class PartyUiHandler extends MessageUiHandler { optionText.setColor("#40c8f8"); optionText.setShadowColor("#006090"); } - optionText.setOrigin(0, 0); + optionText.setOrigin(0); /** For every item that has stack bigger than 1, display the current quantity selection */ const itemModifiers = this.getItemModifiers(pokemon); @@ -1804,6 +1805,7 @@ class PartySlot extends Phaser.GameObjects.Container { private selected: boolean; private transfer: boolean; private slotIndex: number; + private isBenched: boolean; private pokemon: PlayerPokemon; private slotBg: Phaser.GameObjects.Image; @@ -1814,6 +1816,7 @@ class PartySlot extends Phaser.GameObjects.Container { public slotHpText: Phaser.GameObjects.Text; public slotDescriptionLabel: Phaser.GameObjects.Text; // this is used to show text instead of the HP bar i.e. for showing "Able"/"Not Able" for TMs when you try to learn them + private slotBgKey: string; private pokemonIcon: Phaser.GameObjects.Container; private iconAnimHandler: PokemonIconAnimHandler; @@ -1824,19 +1827,34 @@ class PartySlot extends Phaser.GameObjects.Container { partyUiMode: PartyUiMode, tmMoveId: MoveId, ) { - super( - globalScene, - slotIndex >= globalScene.currentBattle.getBattlerCount() ? 230.5 : 64, - slotIndex >= globalScene.currentBattle.getBattlerCount() - ? -184 + - (globalScene.currentBattle.double ? -40 : 0) + - (28 + (globalScene.currentBattle.double ? 8 : 0)) * slotIndex - : partyUiMode === PartyUiMode.MODIFIER_TRANSFER - ? -124 + (globalScene.currentBattle.double ? -20 : 0) + slotIndex * 55 - : -124 + (globalScene.currentBattle.double ? -8 : 0) + slotIndex * 64, - ); + const isBenched = slotIndex >= globalScene.currentBattle.getBattlerCount(); + const isDoubleBattle = globalScene.currentBattle.double; + const isItemManageMode = partyUiMode === PartyUiMode.MODIFIER_TRANSFER || partyUiMode === PartyUiMode.DISCARD; + + /* + * Here we determine the position of the slot. + * The x coordinate depends on whether the pokemon is on the field or in the bench. + * The y coordinate depends on various factors, such as the number of pokémon on the field, + * and whether the transfer/discard button is also on the screen. + */ + const slotPositionX = isBenched ? 143 : 9; + + let slotPositionY: number; + if (isBenched) { + slotPositionY = -196 + (isDoubleBattle ? -40 : 0); + slotPositionY += (28 + (isDoubleBattle ? 8 : 0)) * slotIndex; + } else { + slotPositionY = -148.5; + if (isDoubleBattle) { + slotPositionY += isItemManageMode ? -20 : -8; + } + slotPositionY += (isItemManageMode ? (isDoubleBattle ? 47 : 55) : 64) * slotIndex; + } + + super(globalScene, slotPositionX, slotPositionY); this.slotIndex = slotIndex; + this.isBenched = isBenched; this.pokemon = pokemon; this.iconAnimHandler = iconAnimHandler; @@ -1850,27 +1868,75 @@ class PartySlot extends Phaser.GameObjects.Container { setup(partyUiMode: PartyUiMode, tmMoveId: MoveId) { const currentLanguage = i18next.resolvedLanguage ?? "en"; const offsetJa = currentLanguage === "ja"; + const isItemManageMode = partyUiMode === PartyUiMode.MODIFIER_TRANSFER || partyUiMode === PartyUiMode.DISCARD; - const battlerCount = globalScene.currentBattle.getBattlerCount(); + this.slotBgKey = this.isBenched + ? "party_slot" + : isItemManageMode && globalScene.currentBattle.double + ? "party_slot_main_short" + : "party_slot_main"; + const fullSlotBgKey = this.pokemon.hp ? this.slotBgKey : `${this.slotBgKey}${"_fnt"}`; + this.slotBg = globalScene.add.sprite(0, 0, this.slotBgKey, fullSlotBgKey); + this.slotBg.setOrigin(0); + this.add(this.slotBg); - const slotKey = `party_slot${this.slotIndex >= battlerCount ? "" : "_main"}`; + const genderSymbol = getGenderSymbol(this.pokemon.getGender(true)); + const isFusion = this.pokemon.isFusion(); - const slotBg = globalScene.add.sprite(0, 0, slotKey, `${slotKey}${this.pokemon.hp ? "" : "_fnt"}`); - this.slotBg = slotBg; + // Here we define positions and offsets + // Base values are for the active pokemon; they are changed for benched pokemon, + // or for active pokemon if in a double battle in item management mode. - this.add(slotBg); + // icon position relative to slot background + let slotPb = { x: 4, y: 4 }; + // name position relative to slot background + let namePosition = { x: 24, y: 10 + (offsetJa ? 2 : 0) }; + // maximum allowed length of name; must accomodate fusion symbol + let maxNameTextWidth = 76 - (isFusion ? 8 : 0); + // "Lv." label position relative to slot background + let levelLabelPosition = { x: 24 + 8, y: 10 + 12 }; + // offset from "Lv." to the level number; should not be changed. + const levelTextToLevelLabelOffset = { x: 9, y: offsetJa ? 1.5 : 0 }; + // offests from "Lv." to gender, spliced and status icons, these depend on the type of slot. + let genderTextToLevelLabelOffset = { x: 68 - (isFusion ? 8 : 0), y: -9 }; + let splicedIconToLevelLabelOffset = { x: 68, y: 3.5 - 12 }; + let statusIconToLevelLabelOffset = { x: 55, y: 0 }; + // offset from the name to the shiny icon (on the left); should not be changed. + const shinyIconToNameOffset = { x: -9, y: 3 }; + // hp bar position relative to slot background + let hpBarPosition = { x: 8, y: 31 }; + // offsets of hp bar overlay (showing the remaining hp) and number; should not be changed. + const hpOverlayToBarOffset = { x: 16, y: 2 }; + const hpTextToBarOffset = { x: -3, y: -2 + (offsetJa ? 2 : 0) }; + // description position relative to slot background + let descriptionLabelPosition = { x: 32, y: 46 }; - const slotPb = globalScene.add.sprite( - this.slotIndex >= battlerCount ? -85.5 : -51, - this.slotIndex >= battlerCount ? 0 : -20.5, - "party_pb", - ); - this.slotPb = slotPb; + // If in item management mode, the active slots are shorter + if (isItemManageMode && globalScene.currentBattle.double && !this.isBenched) { + namePosition.y -= 8; + levelLabelPosition.y -= 8; + hpBarPosition.y -= 8; + descriptionLabelPosition.y -= 8; + } - this.add(slotPb); + // Benched slots have significantly different parameters + if (this.isBenched) { + slotPb = { x: 2, y: 12 }; + namePosition = { x: 21, y: 2 + (offsetJa ? 2 : 0) }; + maxNameTextWidth = 52; + levelLabelPosition = { x: 21 + 8, y: 2 + 12 }; + genderTextToLevelLabelOffset = { x: 36, y: 0 }; + splicedIconToLevelLabelOffset = { x: 36 + (genderSymbol ? 8 : 0), y: 0.5 }; + statusIconToLevelLabelOffset = { x: 43, y: 0 }; + hpBarPosition = { x: 72, y: 6 }; + descriptionLabelPosition = { x: 94, y: 16 }; + } - this.pokemonIcon = globalScene.addPokemonIcon(this.pokemon, slotPb.x, slotPb.y, 0.5, 0.5, true); + this.slotPb = globalScene.add.sprite(0, 0, "party_pb"); + this.slotPb.setPosition(slotPb.x, slotPb.y); + this.add(this.slotPb); + this.pokemonIcon = globalScene.addPokemonIcon(this.pokemon, this.slotPb.x, this.slotPb.y, 0.5, 0.5, true); this.add(this.pokemonIcon); this.iconAnimHandler.addOrUpdate(this.pokemonIcon, PokemonIconAnimMode.PASSIVE); @@ -1884,7 +1950,7 @@ class PartySlot extends Phaser.GameObjects.Container { const nameSizeTest = addTextObject(0, 0, displayName, TextStyle.PARTY); nameTextWidth = nameSizeTest.displayWidth; - while (nameTextWidth > (this.slotIndex >= battlerCount ? 52 : 76 - (this.pokemon.fusionSpecies ? 8 : 0))) { + while (nameTextWidth > maxNameTextWidth) { displayName = `${displayName.slice(0, displayName.endsWith(".") ? -2 : -1).trimEnd()}.`; nameSizeTest.setText(displayName); nameTextWidth = nameSizeTest.displayWidth; @@ -1893,78 +1959,59 @@ class PartySlot extends Phaser.GameObjects.Container { nameSizeTest.destroy(); this.slotName = addTextObject(0, 0, displayName, TextStyle.PARTY); - this.slotName.setPositionRelative( - slotBg, - this.slotIndex >= battlerCount ? 21 : 24, - (this.slotIndex >= battlerCount ? 2 : 10) + (offsetJa ? 2 : 0), - ); - this.slotName.setOrigin(0, 0); + this.slotName.setPositionRelative(this.slotBg, namePosition.x, namePosition.y); + this.slotName.setOrigin(0); - const slotLevelLabel = globalScene.add.image(0, 0, "party_slot_overlay_lv"); - slotLevelLabel.setPositionRelative( - slotBg, - (this.slotIndex >= battlerCount ? 21 : 24) + 8, - (this.slotIndex >= battlerCount ? 2 : 10) + 12, - ); - slotLevelLabel.setOrigin(0, 0); + const slotLevelLabel = globalScene.add + .image(0, 0, "party_slot_overlay_lv") + .setPositionRelative(this.slotBg, levelLabelPosition.x, levelLabelPosition.y) + .setOrigin(0); const slotLevelText = addTextObject( 0, 0, this.pokemon.level.toString(), this.pokemon.level < globalScene.getMaxExpLevel() ? TextStyle.PARTY : TextStyle.PARTY_RED, - ); - slotLevelText.setPositionRelative(slotLevelLabel, 9, offsetJa ? 1.5 : 0); - slotLevelText.setOrigin(0, 0.25); - + ) + .setPositionRelative(slotLevelLabel, levelTextToLevelLabelOffset.x, levelTextToLevelLabelOffset.y) + .setOrigin(0, 0.25); slotInfoContainer.add([this.slotName, slotLevelLabel, slotLevelText]); - const genderSymbol = getGenderSymbol(this.pokemon.getGender(true)); - if (genderSymbol) { - const slotGenderText = addTextObject(0, 0, genderSymbol, TextStyle.PARTY); - slotGenderText.setColor(getGenderColor(this.pokemon.getGender(true))); - slotGenderText.setShadowColor(getGenderColor(this.pokemon.getGender(true), true)); - if (this.slotIndex >= battlerCount) { - slotGenderText.setPositionRelative(slotLevelLabel, 36, 0); - } else { - slotGenderText.setPositionRelative(this.slotName, 76 - (this.pokemon.fusionSpecies ? 8 : 0), 3); - } - slotGenderText.setOrigin(0, 0.25); - + const slotGenderText = addTextObject(0, 0, genderSymbol, TextStyle.PARTY) + .setColor(getGenderColor(this.pokemon.getGender(true))) + .setShadowColor(getGenderColor(this.pokemon.getGender(true), true)) + .setPositionRelative(slotLevelLabel, genderTextToLevelLabelOffset.x, genderTextToLevelLabelOffset.y) + .setOrigin(0, 0.25); slotInfoContainer.add(slotGenderText); } - if (this.pokemon.fusionSpecies) { - const splicedIcon = globalScene.add.image(0, 0, "icon_spliced"); - splicedIcon.setScale(0.5); - splicedIcon.setOrigin(0, 0); - if (this.slotIndex >= battlerCount) { - splicedIcon.setPositionRelative(slotLevelLabel, 36 + (genderSymbol ? 8 : 0), 0.5); - } else { - splicedIcon.setPositionRelative(this.slotName, 76, 3.5); - } - + if (isFusion) { + const splicedIcon = globalScene.add + .image(0, 0, "icon_spliced") + .setScale(0.5) + .setOrigin(0) + .setPositionRelative(slotLevelLabel, splicedIconToLevelLabelOffset.x, splicedIconToLevelLabelOffset.y); slotInfoContainer.add(splicedIcon); } if (this.pokemon.status) { - const statusIndicator = globalScene.add.sprite(0, 0, getLocalizedSpriteKey("statuses")); - statusIndicator.setFrame(StatusEffect[this.pokemon.status?.effect].toLowerCase()); - statusIndicator.setOrigin(0, 0); - statusIndicator.setPositionRelative(slotLevelLabel, this.slotIndex >= battlerCount ? 43 : 55, 0); - + const statusIndicator = globalScene.add + .sprite(0, 0, getLocalizedSpriteKey("statuses")) + .setFrame(StatusEffect[this.pokemon.status?.effect].toLowerCase()) + .setOrigin(0) + .setPositionRelative(slotLevelLabel, statusIconToLevelLabelOffset.x, statusIconToLevelLabelOffset.y); slotInfoContainer.add(statusIndicator); } if (this.pokemon.isShiny()) { const doubleShiny = this.pokemon.isDoubleShiny(false); - const shinyStar = globalScene.add.image(0, 0, `shiny_star_small${doubleShiny ? "_1" : ""}`); - shinyStar.setOrigin(0, 0); - shinyStar.setPositionRelative(this.slotName, -9, 3); - shinyStar.setTint(getVariantTint(this.pokemon.getBaseVariant())); - + const shinyStar = globalScene.add + .image(0, 0, `shiny_star_small${doubleShiny ? "_1" : ""}`) + .setOrigin(0) + .setPositionRelative(this.slotName, shinyIconToNameOffset.x, shinyIconToNameOffset.y) + .setTint(getVariantTint(this.pokemon.getBaseVariant())); slotInfoContainer.add(shinyStar); if (doubleShiny) { @@ -1973,50 +2020,38 @@ class PartySlot extends Phaser.GameObjects.Container { .setOrigin(0) .setPosition(shinyStar.x, shinyStar.y) .setTint(getVariantTint(this.pokemon.fusionVariant)); - slotInfoContainer.add(fusionShinyStar); } } - this.slotHpBar = globalScene.add.image(0, 0, "party_slot_hp_bar"); - this.slotHpBar.setPositionRelative( - slotBg, - this.slotIndex >= battlerCount ? 72 : 8, - this.slotIndex >= battlerCount ? 6 : 31, - ); - this.slotHpBar.setOrigin(0, 0); - this.slotHpBar.setVisible(false); + this.slotHpBar = globalScene.add + .image(0, 0, "party_slot_hp_bar") + .setOrigin(0) + .setVisible(false) + .setPositionRelative(this.slotBg, hpBarPosition.x, hpBarPosition.y); const hpRatio = this.pokemon.getHpRatio(); - this.slotHpOverlay = globalScene.add.sprite( - 0, - 0, - "party_slot_hp_overlay", - hpRatio > 0.5 ? "high" : hpRatio > 0.25 ? "medium" : "low", - ); - this.slotHpOverlay.setPositionRelative(this.slotHpBar, 16, 2); - this.slotHpOverlay.setOrigin(0, 0); - this.slotHpOverlay.setScale(hpRatio, 1); - this.slotHpOverlay.setVisible(false); + this.slotHpOverlay = globalScene.add + .sprite(0, 0, "party_slot_hp_overlay", hpRatio > 0.5 ? "high" : hpRatio > 0.25 ? "medium" : "low") + .setOrigin(0) + .setPositionRelative(this.slotHpBar, hpOverlayToBarOffset.x, hpOverlayToBarOffset.y) + .setScale(hpRatio, 1) + .setVisible(false); - this.slotHpText = addTextObject(0, 0, `${this.pokemon.hp}/${this.pokemon.getMaxHp()}`, TextStyle.PARTY); - this.slotHpText.setPositionRelative( - this.slotHpBar, - this.slotHpBar.width - 3, - this.slotHpBar.height - 2 + (offsetJa ? 2 : 0), - ); - this.slotHpText.setOrigin(1, 0); - this.slotHpText.setVisible(false); + this.slotHpText = addTextObject(0, 0, `${this.pokemon.hp}/${this.pokemon.getMaxHp()}`, TextStyle.PARTY) + .setOrigin(1, 0) + .setPositionRelative( + this.slotHpBar, + this.slotHpBar.width + hpTextToBarOffset.x, + this.slotHpBar.height + hpTextToBarOffset.y, + ) // TODO: annoying because it contains the width + .setVisible(false); - this.slotDescriptionLabel = addTextObject(0, 0, "", TextStyle.MESSAGE); - this.slotDescriptionLabel.setPositionRelative( - slotBg, - this.slotIndex >= battlerCount ? 94 : 32, - this.slotIndex >= battlerCount ? 16 : 46, - ); - this.slotDescriptionLabel.setOrigin(0, 1); - this.slotDescriptionLabel.setVisible(false); + this.slotDescriptionLabel = addTextObject(0, 0, "", TextStyle.MESSAGE) + .setOrigin(0, 1) + .setVisible(false) + .setPositionRelative(this.slotBg, descriptionLabelPosition.x, descriptionLabelPosition.y); slotInfoContainer.add([this.slotHpBar, this.slotHpOverlay, this.slotHpText, this.slotDescriptionLabel]); @@ -2078,10 +2113,9 @@ class PartySlot extends Phaser.GameObjects.Container { } private updateSlotTexture(): void { - const battlerCount = globalScene.currentBattle.getBattlerCount(); this.slotBg.setTexture( - `party_slot${this.slotIndex >= battlerCount ? "" : "_main"}`, - `party_slot${this.slotIndex >= battlerCount ? "" : "_main"}${this.transfer ? "_swap" : this.pokemon.hp ? "" : "_fnt"}${this.selected ? "_sel" : ""}`, + this.slotBgKey, + `${this.slotBgKey}${this.transfer ? "_swap" : this.pokemon.hp ? "" : "_fnt"}${this.selected ? "_sel" : ""}`, ); } } @@ -2108,7 +2142,12 @@ class PartyCancelButton extends Phaser.GameObjects.Container { this.partyCancelPb = partyCancelPb; - const partyCancelText = addTextObject(-10, -7, i18next.t("partyUiHandler:cancel"), TextStyle.PARTY_CANCEL_BUTTON); + const partyCancelText = addTextObject( + -10, + -7, + i18next.t("partyUiHandler:cancelButton"), + TextStyle.PARTY_CANCEL_BUTTON, + ); this.add(partyCancelText); } @@ -2200,10 +2239,6 @@ class PartyDiscardModeButton extends Phaser.GameObjects.Container { 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: @@ -2211,13 +2246,13 @@ class PartyDiscardModeButton extends Phaser.GameObjects.Container { 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; } + this.setPosition( + globalScene.currentBattle.double ? DISCARD_BUTTON_X_DOUBLES : DISCARD_BUTTON_X, + globalScene.currentBattle.double ? DISCARD_BUTTON_Y_DOUBLES : DISCARD_BUTTON_Y, + ); } clear() { diff --git a/src/ui/pokeball-tray.ts b/src/ui/pokeball-tray.ts index 9720aa42090..b1522af0e27 100644 --- a/src/ui/pokeball-tray.ts +++ b/src/ui/pokeball-tray.ts @@ -10,7 +10,7 @@ export class PokeballTray extends Phaser.GameObjects.Container { public shown: boolean; constructor(player: boolean) { - super(globalScene, player ? globalScene.game.canvas.width / 6 : 0, player ? -72 : -144); + super(globalScene, player ? globalScene.scaledCanvas.width : 0, player ? -72 : -144); this.player = player; } @@ -36,7 +36,7 @@ export class PokeballTray extends Phaser.GameObjects.Container { .map((_, i) => globalScene.add.sprite( (this.player ? -83 : 76) + - (globalScene.game.canvas.width / 6) * (this.player ? -1 : 1) + + globalScene.scaledCanvas.width * (this.player ? -1 : 1) + 10 * i * (this.player ? 1 : -1), -8, "pb_tray_ball", @@ -67,7 +67,7 @@ export class PokeballTray extends Phaser.GameObjects.Container { this.bg.alpha = 1; this.balls.forEach((ball, b) => { - ball.x += (globalScene.game.canvas.width / 6 + 104) * (this.player ? 1 : -1); + ball.x += (globalScene.scaledCanvas.width + 104) * (this.player ? 1 : -1); let ballFrame = "ball"; if (b >= party.length) { ballFrame = "empty"; @@ -115,7 +115,7 @@ export class PokeballTray extends Phaser.GameObjects.Container { this.balls.forEach((ball, b) => { globalScene.tweens.add({ targets: ball, - x: `${this.player ? "-" : "+"}=${globalScene.game.canvas.width / 6}`, + x: `${this.player ? "-" : "+"}=${globalScene.scaledCanvas.width}`, duration: 250, delay: b * 100, ease: "Sine.easeIn", diff --git a/src/ui/pokedex-info-overlay.ts b/src/ui/pokedex-info-overlay.ts index 0f2f5fa3dde..9c5876318ec 100644 --- a/src/ui/pokedex-info-overlay.ts +++ b/src/ui/pokedex-info-overlay.ts @@ -7,7 +7,6 @@ import { fixedInt } from "#utils/common"; export interface PokedexInfoOverlaySettings { delayVisibility?: boolean; // if true, showing the overlay will only set it to active and populate the fields and the handler using this field has to manually call setVisible later. - scale?: number; // scale the box? A scale of 0.5 is recommended //location and width of the component; unaffected by scaling x?: number; y?: number; @@ -36,17 +35,15 @@ export class PokedexInfoOverlay extends Phaser.GameObjects.Container implements private maskPointOriginX: number; private maskPointOriginY: number; - public scale: number; public width: number; constructor(options?: PokedexInfoOverlaySettings) { super(globalScene, options?.x, options?.y); - this.scale = options?.scale || 1; // set up the scale - this.setScale(this.scale); + this.setScale(1); this.options = options || {}; // prepare the description box - this.width = (options?.width || PokedexInfoOverlay.getWidth(this.scale)) / this.scale; // divide by scale as we always want this to be half a window wide + this.width = options?.width || PokedexInfoOverlay.getWidth(); // we always want this to be half a window wide this.descBg = addWindow(0, 0, this.width, DESC_HEIGHT); this.descBg.setOrigin(0, 0); this.add(this.descBg); @@ -61,19 +58,19 @@ export class PokedexInfoOverlay extends Phaser.GameObjects.Container implements this.maskPointOriginY = options?.y || 0; if (this.maskPointOriginX < 0) { - this.maskPointOriginX += globalScene.game.canvas.width / GLOBAL_SCALE; + this.maskPointOriginX += globalScene.scaledCanvas.width; } if (this.maskPointOriginY < 0) { - this.maskPointOriginY += globalScene.game.canvas.height / GLOBAL_SCALE; + this.maskPointOriginY += globalScene.scaledCanvas.height; } this.textMaskRect = globalScene.make.graphics(); this.textMaskRect.fillStyle(0xff0000); this.textMaskRect.fillRect( - this.maskPointOriginX + BORDER * this.scale, - this.maskPointOriginY + (BORDER - 2) * this.scale, - this.width - BORDER * 2 * this.scale, - (DESC_HEIGHT - (BORDER - 2) * 2) * this.scale, + this.maskPointOriginX + BORDER, + this.maskPointOriginY + (BORDER - 2), + this.width - BORDER * 2, + DESC_HEIGHT - (BORDER - 2) * 2, ); this.textMaskRect.setScale(6); const textMask = this.createGeometryMask(this.textMaskRect); @@ -111,10 +108,10 @@ export class PokedexInfoOverlay extends Phaser.GameObjects.Container implements this.textMaskRect.clear(); this.textMaskRect.fillStyle(0xff0000); this.textMaskRect.fillRect( - this.maskPointOriginX + BORDER * this.scale, - this.maskPointOriginY + (BORDER - 2) * this.scale + (48 - newHeight), - this.width - BORDER * 2 * this.scale, - (newHeight - (BORDER - 2) * 2) * this.scale, + this.maskPointOriginX + BORDER, + this.maskPointOriginY + (BORDER - 2) + (48 - newHeight), + this.width - BORDER * 2, + newHeight - (BORDER - 2) * 2, ); const updatedMask = this.createGeometryMask(this.textMaskRect); this.desc.setMask(updatedMask); @@ -167,12 +164,12 @@ export class PokedexInfoOverlay extends Phaser.GameObjects.Container implements } // width of this element - static getWidth(_scale: number): number { - return globalScene.game.canvas.width / GLOBAL_SCALE / 2; + static getWidth(): number { + return globalScene.scaledCanvas.width / 2; } // height of this element - static getHeight(scale: number, _onSide?: boolean): number { - return DESC_HEIGHT * scale; + static getHeight(): number { + return DESC_HEIGHT; } } diff --git a/src/ui/pokedex-mon-container.ts b/src/ui/pokedex-mon-container.ts index cfb8555e6c9..832d7e4bcd6 100644 --- a/src/ui/pokedex-mon-container.ts +++ b/src/ui/pokedex-mon-container.ts @@ -208,6 +208,26 @@ export class PokedexMonContainer extends Phaser.GameObjects.Container { ); this.checkIconId(defaultProps.female, defaultProps.formIndex, defaultProps.shiny, defaultProps.variant); this.add(this.icon); + + [ + this.hiddenAbilityIcon, + this.favoriteIcon, + this.classicWinIcon, + this.candyUpgradeIcon, + this.candyUpgradeOverlayIcon, + this.eggMove1Icon, + this.tmMove1Icon, + this.eggMove2Icon, + this.tmMove2Icon, + this.passive1Icon, + this.passive2Icon, + this.passive1OverlayIcon, + this.passive2OverlayIcon, + ].forEach(icon => { + if (icon) { + this.bringToTop(icon); + } + }); } checkIconId(female, formIndex, shiny, variant) { diff --git a/src/ui/pokedex-page-ui-handler.ts b/src/ui/pokedex-page-ui-handler.ts index 227b86c4d4d..49658d9cfc9 100644 --- a/src/ui/pokedex-page-ui-handler.ts +++ b/src/ui/pokedex-page-ui-handler.ts @@ -46,7 +46,7 @@ import { getVariantIcon, getVariantTint } from "#sprites/variant"; import type { StarterAttributes } from "#system/game-data"; import { SettingKeyboard } from "#system/settings-keyboard"; import type { DexEntry } from "#types/dex-data"; -import type { OptionSelectItem } from "#ui/abstact-option-select-ui-handler"; +import type { OptionSelectItem } from "#ui/abstract-option-select-ui-handler"; import { BaseStatsOverlay } from "#ui/base-stats-overlay"; import { MessageUiHandler } from "#ui/message-ui-handler"; import { MoveInfoOverlay } from "#ui/move-info-overlay"; @@ -299,15 +299,15 @@ export class PokedexPageUiHandler extends MessageUiHandler { const langSettingKey = Object.keys(languageSettings).find(lang => currentLanguage.includes(lang)) ?? "en"; const textSettings = languageSettings[langSettingKey]; - this.starterSelectContainer = globalScene.add.container(0, -globalScene.game.canvas.height / 6); + this.starterSelectContainer = globalScene.add.container(0, -globalScene.scaledCanvas.height); this.starterSelectContainer.setVisible(false); ui.add(this.starterSelectContainer); const bgColor = globalScene.add.rectangle( 0, 0, - globalScene.game.canvas.width / 6, - globalScene.game.canvas.height / 6, + globalScene.scaledCanvas.width, + globalScene.scaledCanvas.height, 0x006860, ); bgColor.setOrigin(0, 0); @@ -602,7 +602,7 @@ export class PokedexPageUiHandler extends MessageUiHandler { this.filterInstructionsContainer.setVisible(true); this.starterSelectContainer.add(this.filterInstructionsContainer); - this.starterSelectMessageBoxContainer = globalScene.add.container(0, globalScene.game.canvas.height / 6); + this.starterSelectMessageBoxContainer = globalScene.add.container(0, globalScene.scaledCanvas.height); this.starterSelectMessageBoxContainer.setVisible(false); this.starterSelectContainer.add(this.starterSelectMessageBoxContainer); @@ -629,7 +629,7 @@ export class PokedexPageUiHandler extends MessageUiHandler { this.menuContainer = globalScene.add.container(-130, 0); this.menuContainer.setName("menu"); this.menuContainer.setInteractive( - new Phaser.Geom.Rectangle(0, 0, globalScene.game.canvas.width / 6, globalScene.game.canvas.height / 6), + new Phaser.Geom.Rectangle(0, 0, globalScene.scaledCanvas.width, globalScene.scaledCanvas.height), Phaser.Geom.Rectangle.Contains, ); @@ -659,10 +659,10 @@ export class PokedexPageUiHandler extends MessageUiHandler { this.scale = getTextStyleOptions(TextStyle.WINDOW, globalScene.uiTheme).scale; this.menuBg = addWindow( - globalScene.game.canvas.width / 6 - 83, + globalScene.scaledCanvas.width - 83, 0, this.optionSelectText.displayWidth + 19 + 24 * this.scale, - globalScene.game.canvas.height / 6 - 2, + globalScene.scaledCanvas.height - 2, ); this.menuBg.setOrigin(0, 0); @@ -682,19 +682,16 @@ export class PokedexPageUiHandler extends MessageUiHandler { this.menuContainer.bringToTop(this.baseStatsOverlay); // 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({ - scale: overlayScale, top: true, x: 1, - y: globalScene.game.canvas.height / 6 - MoveInfoOverlay.getHeight(overlayScale) - 29, + y: globalScene.scaledCanvas.height - MoveInfoOverlay.getHeight() - 29, }); this.starterSelectContainer.add(this.moveInfoOverlay); this.infoOverlay = new PokedexInfoOverlay({ - scale: overlayScale, x: 1, - y: globalScene.game.canvas.height / 6 - PokedexInfoOverlay.getHeight(overlayScale) - 29, + y: globalScene.scaledCanvas.height - PokedexInfoOverlay.getHeight() - 29, }); this.starterSelectContainer.add(this.infoOverlay); @@ -1103,7 +1100,7 @@ export class PokedexPageUiHandler extends MessageUiHandler { this.starterSelectMessageBoxContainer.setY(0); this.message.setY(4); } else { - this.starterSelectMessageBoxContainer.setY(globalScene.game.canvas.height / 6); + this.starterSelectMessageBoxContainer.setY(globalScene.scaledCanvas.height); this.starterSelectMessageBox.setOrigin(0, 1); this.message.setY(singleLine ? -22 : -37); } diff --git a/src/ui/pokedex-scan-ui-handler.ts b/src/ui/pokedex-scan-ui-handler.ts index ab3258a03de..4f606cbcbb0 100644 --- a/src/ui/pokedex-scan-ui-handler.ts +++ b/src/ui/pokedex-scan-ui-handler.ts @@ -1,7 +1,7 @@ import { allAbilities, allMoves, allSpecies } from "#data/data-lists"; import { UiMode } from "#enums/ui-mode"; import type { PlayerPokemon } from "#field/pokemon"; -import type { OptionSelectItem } from "#ui/abstact-option-select-ui-handler"; +import type { OptionSelectItem } from "#ui/abstract-option-select-ui-handler"; import { FilterTextRow } from "#ui/filter-text"; import type { InputFieldConfig } from "#ui/form-modal-ui-handler"; import { FormModalUiHandler } from "#ui/form-modal-ui-handler"; diff --git a/src/ui/pokedex-ui-handler.ts b/src/ui/pokedex-ui-handler.ts index cd1dc312f4d..6a6afea9798 100644 --- a/src/ui/pokedex-ui-handler.ts +++ b/src/ui/pokedex-ui-handler.ts @@ -33,7 +33,7 @@ import { getVariantIcon, getVariantTint } from "#sprites/variant"; import type { DexAttrProps, StarterAttributes } from "#system/game-data"; import { SettingKeyboard } from "#system/settings-keyboard"; import type { DexEntry } from "#types/dex-data"; -import type { OptionSelectConfig } from "#ui/abstact-option-select-ui-handler"; +import type { OptionSelectConfig } from "#ui/abstract-option-select-ui-handler"; import { DropDown, DropDownLabel, DropDownOption, DropDownState, DropDownType, SortCriteria } from "#ui/dropdown"; import { FilterBar } from "#ui/filter-bar"; import { FilterText, FilterTextRow } from "#ui/filter-text"; @@ -245,15 +245,15 @@ export class PokedexUiHandler extends MessageUiHandler { const langSettingKey = Object.keys(languageSettings).find(lang => currentLanguage.includes(lang)) ?? "en"; const textSettings = languageSettings[langSettingKey]; - this.starterSelectContainer = globalScene.add.container(0, -globalScene.game.canvas.height / 6); + this.starterSelectContainer = globalScene.add.container(0, -globalScene.scaledCanvas.height); this.starterSelectContainer.setVisible(false); ui.add(this.starterSelectContainer); const bgColor = globalScene.add.rectangle( 0, 0, - globalScene.game.canvas.width / 6, - globalScene.game.canvas.height / 6, + globalScene.scaledCanvas.width, + globalScene.scaledCanvas.height, 0x006860, ); bgColor.setOrigin(0, 0); @@ -410,6 +410,11 @@ export class PokedexUiHandler extends MessageUiHandler { new DropDownLabel(i18next.t("filterBar:hasHiddenAbility"), undefined, DropDownState.ON), new DropDownLabel(i18next.t("filterBar:noHiddenAbility"), undefined, DropDownState.EXCLUDE), ]; + const seenSpeciesLabels = [ + new DropDownLabel(i18next.t("filterBar:seenSpecies"), undefined, DropDownState.OFF), + new DropDownLabel(i18next.t("filterBar:isSeen"), undefined, DropDownState.ON), + new DropDownLabel(i18next.t("filterBar:isUnseen"), undefined, DropDownState.EXCLUDE), + ]; const eggLabels = [ new DropDownLabel(i18next.t("filterBar:egg"), undefined, DropDownState.OFF), new DropDownLabel(i18next.t("filterBar:eggPurchasable"), undefined, DropDownState.ON), @@ -423,6 +428,7 @@ export class PokedexUiHandler extends MessageUiHandler { new DropDownOption("FAVORITE", favoriteLabels), new DropDownOption("WIN", winLabels), new DropDownOption("HIDDEN_ABILITY", hiddenAbilityLabels), + new DropDownOption("SEEN_SPECIES", seenSpeciesLabels), new DropDownOption("EGG", eggLabels), new DropDownOption("POKERUS", pokerusLabels), ]; @@ -544,7 +550,7 @@ export class PokedexUiHandler extends MessageUiHandler { this.type2Icon.setOrigin(0, 0); this.starterSelectContainer.add(this.type2Icon); - this.starterSelectMessageBoxContainer = globalScene.add.container(0, globalScene.game.canvas.height / 6); + this.starterSelectMessageBoxContainer = globalScene.add.container(0, globalScene.scaledCanvas.height); this.starterSelectMessageBoxContainer.setVisible(false); this.starterSelectContainer.add(this.starterSelectMessageBoxContainer); @@ -784,7 +790,7 @@ export class PokedexUiHandler extends MessageUiHandler { this.starterSelectMessageBoxContainer.setY(0); this.message.setY(4); } else { - this.starterSelectMessageBoxContainer.setY(globalScene.game.canvas.height / 6); + this.starterSelectMessageBoxContainer.setY(globalScene.scaledCanvas.height); this.starterSelectMessageBox.setOrigin(0, 1); this.message.setY(singleLine ? -22 : -37); } @@ -792,13 +798,15 @@ export class PokedexUiHandler extends MessageUiHandler { this.starterSelectMessageBoxContainer.setVisible(!!text?.length); } - isSeen(species: PokemonSpecies, dexEntry: DexEntry): boolean { + isSeen(species: PokemonSpecies, dexEntry: DexEntry, seenFilter?: boolean): boolean { if (dexEntry?.seenAttr) { return true; } - - const starterDexEntry = globalScene.gameData.dexData[this.getStarterSpeciesId(species.speciesId)]; - return !!starterDexEntry?.caughtAttr; + if (!seenFilter) { + const starterDexEntry = globalScene.gameData.dexData[this.getStarterSpeciesId(species.speciesId)]; + return !!starterDexEntry?.caughtAttr; + } + return false; } /** @@ -1617,6 +1625,21 @@ export class PokedexUiHandler extends MessageUiHandler { } }); + // Seen Filter + const dexEntry = globalScene.gameData.dexData[species.speciesId]; + const isItSeen = this.isSeen(species, dexEntry, true); + const fitsSeen = this.filterBar.getVals(DropDownColumn.MISC).some(misc => { + if (misc.val === "SEEN_SPECIES" && misc.state === DropDownState.ON) { + return isItSeen; + } + if (misc.val === "SEEN_SPECIES" && misc.state === DropDownState.EXCLUDE) { + return !isItSeen; + } + if (misc.val === "SEEN_SPECIES" && misc.state === DropDownState.OFF) { + return true; + } + }); + // Egg Purchasable Filter const isEggPurchasable = this.isSameSpeciesEggAvailable(species.speciesId); const fitsEgg = this.filterBar.getVals(DropDownColumn.MISC).some(misc => { @@ -1658,6 +1681,7 @@ export class PokedexUiHandler extends MessageUiHandler { fitsFavorite && fitsWin && fitsHA && + fitsSeen && fitsEgg && fitsPokerus ) { diff --git a/src/ui/rename-run-ui-handler.ts b/src/ui/rename-run-ui-handler.ts new file mode 100644 index 00000000000..23ba0137f2d --- /dev/null +++ b/src/ui/rename-run-ui-handler.ts @@ -0,0 +1,54 @@ +import i18next from "i18next"; +import type { InputFieldConfig } from "./form-modal-ui-handler"; +import { FormModalUiHandler } from "./form-modal-ui-handler"; +import type { ModalConfig } from "./modal-ui-handler"; + +export class RenameRunFormUiHandler extends FormModalUiHandler { + getModalTitle(_config?: ModalConfig): string { + return i18next.t("menu:renamerun"); + } + + getWidth(_config?: ModalConfig): number { + return 160; + } + + getMargin(_config?: ModalConfig): [number, number, number, number] { + return [0, 0, 48, 0]; + } + + getButtonLabels(_config?: ModalConfig): string[] { + return [i18next.t("menu:rename"), i18next.t("menu:cancel")]; + } + + getReadableErrorMessage(error: string): string { + const colonIndex = error?.indexOf(":"); + if (colonIndex > 0) { + error = error.slice(0, colonIndex); + } + + return super.getReadableErrorMessage(error); + } + + override getInputFieldConfigs(): InputFieldConfig[] { + return [{ label: i18next.t("menu:runName") }]; + } + + show(args: any[]): boolean { + if (!super.show(args)) { + return false; + } + if (this.inputs?.length) { + this.inputs.forEach(input => { + input.text = ""; + }); + } + const config = args[0] as ModalConfig; + this.submitAction = _ => { + this.sanitizeInputs(); + const sanitizedName = btoa(encodeURIComponent(this.inputs[0].text)); + config.buttonActions[0](sanitizedName); + return true; + }; + return true; + } +} diff --git a/src/ui/run-history-ui-handler.ts b/src/ui/run-history-ui-handler.ts index 00aa47ae65d..457c48654a3 100644 --- a/src/ui/run-history-ui-handler.ts +++ b/src/ui/run-history-ui-handler.ts @@ -54,14 +54,14 @@ export class RunHistoryUiHandler extends MessageUiHandler { const loadSessionBg = globalScene.add.rectangle( 0, 0, - globalScene.game.canvas.width / 6, - -globalScene.game.canvas.height / 6, + globalScene.scaledCanvas.width, + -globalScene.scaledCanvas.height, 0x006860, ); loadSessionBg.setOrigin(0, 0); this.runSelectContainer.add(loadSessionBg); - this.runContainerInitialY = -globalScene.game.canvas.height / 6 + 8; + this.runContainerInitialY = -globalScene.scaledCanvas.height + 8; this.runsContainer = globalScene.add.container(8, this.runContainerInitialY); this.runSelectContainer.add(this.runsContainer); diff --git a/src/ui/run-info-ui-handler.ts b/src/ui/run-info-ui-handler.ts index 465e48a45ad..db0790275fc 100644 --- a/src/ui/run-info-ui-handler.ts +++ b/src/ui/run-info-ui-handler.ts @@ -26,6 +26,7 @@ import { addBBCodeTextObject, addTextObject, getTextColor } from "#ui/text"; import { UiHandler } from "#ui/ui-handler"; import { addWindow } from "#ui/ui-theme"; import { formatFancyLargeNumber, formatLargeNumber, formatMoney, getPlayTimeString } from "#utils/common"; +import { toCamelCase } from "#utils/strings"; import i18next from "i18next"; import RoundRectangle from "phaser3-rex-plugins/plugins/roundrectangle"; @@ -74,7 +75,7 @@ export class RunInfoUiHandler extends UiHandler { } override async setup() { - this.runContainer = globalScene.add.container(1, -(globalScene.game.canvas.height / 6) + 1); + this.runContainer = globalScene.add.container(1, -globalScene.scaledCanvas.height + 1); // The import of the modifiersModule is loaded here to sidestep async/await issues. this.modifiersModule = Modifier; this.runContainer.setVisible(false); @@ -120,7 +121,7 @@ export class RunInfoUiHandler extends UiHandler { // Creates Header and adds to this.runContainer this.addHeader(); - this.statsBgWidth = (globalScene.game.canvas.width / 6 - 2) / 3; + this.statsBgWidth = (globalScene.scaledCanvas.width - 2) / 3; // Creates Run Result Container this.runResultContainer = globalScene.add.container(0, 24); @@ -147,7 +148,7 @@ export class RunInfoUiHandler extends UiHandler { this.showParty(true); this.runContainer.setInteractive( - new Phaser.Geom.Rectangle(0, 0, globalScene.game.canvas.width / 6, globalScene.game.canvas.height / 6), + new Phaser.Geom.Rectangle(0, 0, globalScene.scaledCanvas.width, globalScene.scaledCanvas.height), Phaser.Geom.Rectangle.Contains, ); this.getUi().bringToTop(this.runContainer); @@ -174,7 +175,7 @@ export class RunInfoUiHandler extends UiHandler { * It does not check if the run has any PokemonHeldItemModifiers though. */ private addHeader() { - const headerBg = addWindow(0, 0, globalScene.game.canvas.width / 6 - 2, 24); + const headerBg = addWindow(0, 0, globalScene.scaledCanvas.width - 2, 24); headerBg.setOrigin(0, 0); this.runContainer.add(headerBg); if (this.runInfo.modifiers.length !== 0) { @@ -207,6 +208,11 @@ export class RunInfoUiHandler extends UiHandler { headerText.setOrigin(0, 0); headerText.setPositionRelative(headerBg, 8, 4); this.runContainer.add(headerText); + const runName = addTextObject(0, 0, this.runInfo.name, TextStyle.WINDOW); + runName.setOrigin(0, 0); + const runNameX = headerText.width / 6 + headerText.x + 4; + runName.setPositionRelative(headerBg, runNameX, 4); + this.runContainer.add(runName); } /** @@ -702,11 +708,8 @@ export class RunInfoUiHandler extends UiHandler { rules.push(i18next.t("challenges:inverseBattle.shortName")); break; default: { - const localisationKey = Challenges[this.runInfo.challenges[i].id] - .split("_") - .map((f, i) => (i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase())) - .join(""); - rules.push(i18next.t(`challenges:${localisationKey}.name`)); + const localizationKey = toCamelCase(Challenges[this.runInfo.challenges[i].id]); + rules.push(i18next.t(`challenges:${localizationKey}.name`)); break; } } @@ -723,7 +726,7 @@ export class RunInfoUiHandler extends UiHandler { private parsePartyInfo(): void { const party = this.runInfo.party; const currentLanguage = i18next.resolvedLanguage ?? "en"; - const windowHeight = (globalScene.game.canvas.height / 6 - 23) / 6; + const windowHeight = (globalScene.scaledCanvas.height - 23) / 6; party.forEach((p: PokemonData, i: number) => { const pokemonInfoWindow = new RoundRectangle(globalScene, 0, 14, this.statsBgWidth * 2 + 10, windowHeight - 2, 3); @@ -971,8 +974,8 @@ export class RunInfoUiHandler extends UiHandler { endCard.setOrigin(0); endCard.setScale(0.5); const text = addTextObject( - globalScene.game.canvas.width / 12, - globalScene.game.canvas.height / 6 - 16, + globalScene.scaledCanvas.width / 2, + globalScene.scaledCanvas.height - 16, i18next.t("battle:congratulations"), TextStyle.SUMMARY, { fontSize: "128px" }, diff --git a/src/ui/save-slot-select-ui-handler.ts b/src/ui/save-slot-select-ui-handler.ts index 9da34e672f1..e9f9c5a0038 100644 --- a/src/ui/save-slot-select-ui-handler.ts +++ b/src/ui/save-slot-select-ui-handler.ts @@ -1,12 +1,14 @@ import { GameMode } from "#app/game-mode"; import { globalScene } from "#app/global-scene"; import { Button } from "#enums/buttons"; +import { GameModes } from "#enums/game-modes"; import { TextStyle } from "#enums/text-style"; import { UiMode } from "#enums/ui-mode"; // biome-ignore lint/performance/noNamespaceImport: See `src/system/game-data.ts` import * as Modifier from "#modifiers/modifier"; import type { SessionSaveData } from "#system/game-data"; import type { PokemonData } from "#system/pokemon-data"; +import type { OptionSelectConfig } from "#ui/abstract-option-select-ui-handler"; import { MessageUiHandler } from "#ui/message-ui-handler"; import { RunDisplayMode } from "#ui/run-info-ui-handler"; import { addTextObject } from "#ui/text"; @@ -15,7 +17,7 @@ import { fixedInt, formatLargeNumber, getPlayTimeString, isNullOrUndefined } fro import i18next from "i18next"; const SESSION_SLOTS_COUNT = 5; -const SLOTS_ON_SCREEN = 3; +const SLOTS_ON_SCREEN = 2; export enum SaveSlotUiMode { LOAD, @@ -33,6 +35,7 @@ export class SaveSlotSelectUiHandler extends MessageUiHandler { private uiMode: SaveSlotUiMode; private saveSlotSelectCallback: SaveSlotSelectCallback | null; + protected manageDataConfig: OptionSelectConfig; private scrollCursor = 0; @@ -54,14 +57,14 @@ export class SaveSlotSelectUiHandler extends MessageUiHandler { const loadSessionBg = globalScene.add.rectangle( 0, 0, - globalScene.game.canvas.width / 6, - -globalScene.game.canvas.height / 6, + globalScene.scaledCanvas.width, + -globalScene.scaledCanvas.height, 0x006860, ); loadSessionBg.setOrigin(0, 0); this.saveSlotSelectContainer.add(loadSessionBg); - this.sessionSlotsContainerInitialY = -globalScene.game.canvas.height / 6 + 8; + this.sessionSlotsContainerInitialY = -globalScene.scaledCanvas.height + 8; this.sessionSlotsContainer = globalScene.add.container(8, this.sessionSlotsContainerInitialY); this.saveSlotSelectContainer.add(this.sessionSlotsContainer); @@ -101,6 +104,7 @@ export class SaveSlotSelectUiHandler extends MessageUiHandler { processInput(button: Button): boolean { const ui = this.getUi(); + const manageDataOptions: any[] = []; let success = false; let error = false; @@ -109,14 +113,115 @@ export class SaveSlotSelectUiHandler extends MessageUiHandler { const originalCallback = this.saveSlotSelectCallback; if (button === Button.ACTION) { const cursor = this.cursor + this.scrollCursor; - if (this.uiMode === SaveSlotUiMode.LOAD && !this.sessionSlots[cursor].hasData) { + const sessionSlot = this.sessionSlots[cursor]; + if (this.uiMode === SaveSlotUiMode.LOAD && !sessionSlot.hasData) { error = true; } else { switch (this.uiMode) { case SaveSlotUiMode.LOAD: - this.saveSlotSelectCallback = null; - originalCallback?.(cursor); + if (!sessionSlot.malformed) { + manageDataOptions.push({ + label: i18next.t("menu:loadGame"), + handler: () => { + globalScene.ui.revertMode(); + originalCallback?.(cursor); + return true; + }, + keepOpen: false, + }); + + manageDataOptions.push({ + label: i18next.t("saveSlotSelectUiHandler:renameRun"), + handler: () => { + globalScene.ui.revertMode(); + ui.setOverlayMode( + UiMode.RENAME_RUN, + { + buttonActions: [ + (sanitizedName: string) => { + const name = decodeURIComponent(atob(sanitizedName)); + globalScene.gameData.renameSession(cursor, name).then(response => { + if (response[0] === false) { + globalScene.reset(true); + } else { + this.clearSessionSlots(); + this.cursorObj = null; + this.populateSessionSlots(); + this.setScrollCursor(0); + this.setCursor(0); + ui.revertMode(); + ui.showText("", 0); + } + }); + }, + () => { + ui.revertMode(); + }, + ], + }, + "", + ); + return true; + }, + }); + } + + this.manageDataConfig = { + xOffset: 0, + yOffset: 48, + options: manageDataOptions, + maxOptions: 4, + }; + + manageDataOptions.push({ + label: i18next.t("saveSlotSelectUiHandler:deleteRun"), + handler: () => { + globalScene.ui.revertMode(); + ui.showText(i18next.t("saveSlotSelectUiHandler:deleteData"), null, () => { + ui.setOverlayMode( + UiMode.CONFIRM, + () => { + globalScene.gameData.tryClearSession(cursor).then(response => { + if (response[0] === false) { + globalScene.reset(true); + } else { + this.clearSessionSlots(); + this.cursorObj = null; + this.populateSessionSlots(); + this.setScrollCursor(0); + this.setCursor(0); + ui.revertMode(); + ui.showText("", 0); + } + }); + }, + () => { + ui.revertMode(); + ui.showText("", 0); + }, + false, + 0, + 19, + import.meta.env.DEV ? 300 : 2000, + ); + }); + return true; + }, + keepOpen: false, + }); + + manageDataOptions.push({ + label: i18next.t("menuUiHandler:cancel"), + handler: () => { + globalScene.ui.revertMode(); + return true; + }, + keepOpen: true, + }); + + ui.setOverlayMode(UiMode.MENU_OPTION_SELECT, this.manageDataConfig); break; + case SaveSlotUiMode.SAVE: { const saveAndCallback = () => { const originalCallback = this.saveSlotSelectCallback; @@ -161,6 +266,7 @@ export class SaveSlotSelectUiHandler extends MessageUiHandler { } } else { this.saveSlotSelectCallback = null; + ui.showText("", 0); originalCallback?.(-1); success = true; } @@ -267,33 +373,34 @@ export class SaveSlotSelectUiHandler extends MessageUiHandler { this.cursorObj = globalScene.add.container(0, 0); const cursorBox = globalScene.add.nineslice( 0, - 0, + 15, "select_cursor_highlight_thick", undefined, - 296, - 44, + 294, + this.sessionSlots[prevSlotIndex ?? 0]?.saveData?.name ? 50 : 60, 6, 6, 6, 6, ); const rightArrow = globalScene.add.image(0, 0, "cursor"); - rightArrow.setPosition(160, 0); + rightArrow.setPosition(160, 15); rightArrow.setName("rightArrow"); this.cursorObj.add([cursorBox, rightArrow]); this.sessionSlotsContainer.add(this.cursorObj); } const cursorPosition = cursor + this.scrollCursor; - const cursorIncrement = cursorPosition * 56; + const cursorIncrement = cursorPosition * 76; if (this.sessionSlots[cursorPosition] && this.cursorObj) { - const hasData = this.sessionSlots[cursorPosition].hasData; + const session = this.sessionSlots[cursorPosition]; + const hasData = session.hasData && !session.malformed; // If the session slot lacks session data, it does not move from its default, central position. // Only session slots with session data will move leftwards and have a visible arrow. if (!hasData) { - this.cursorObj.setPosition(151, 26 + cursorIncrement); + this.cursorObj.setPosition(151, 20 + cursorIncrement); this.sessionSlots[cursorPosition].setPosition(0, cursorIncrement); } else { - this.cursorObj.setPosition(145, 26 + cursorIncrement); + this.cursorObj.setPosition(145, 20 + cursorIncrement); this.sessionSlots[cursorPosition].setPosition(-6, cursorIncrement); } this.setArrowVisibility(hasData); @@ -311,7 +418,8 @@ export class SaveSlotSelectUiHandler extends MessageUiHandler { revertSessionSlot(slotIndex: number): void { const sessionSlot = this.sessionSlots[slotIndex]; if (sessionSlot) { - sessionSlot.setPosition(0, slotIndex * 56); + const valueHeight = 76; + sessionSlot.setPosition(0, slotIndex * valueHeight); } } @@ -340,7 +448,7 @@ export class SaveSlotSelectUiHandler extends MessageUiHandler { this.setCursor(this.cursor, prevSlotIndex); globalScene.tweens.add({ targets: this.sessionSlotsContainer, - y: this.sessionSlotsContainerInitialY - 56 * scrollCursor, + y: this.sessionSlotsContainerInitialY - 76 * scrollCursor, duration: fixedInt(325), ease: "Sine.easeInOut", }); @@ -374,12 +482,14 @@ export class SaveSlotSelectUiHandler extends MessageUiHandler { class SessionSlot extends Phaser.GameObjects.Container { public slotId: number; public hasData: boolean; + /** Indicates the save slot ran into an error while being loaded */ + public malformed: boolean; + private slotWindow: Phaser.GameObjects.NineSlice; private loadingLabel: Phaser.GameObjects.Text; - public saveData: SessionSaveData; constructor(slotId: number) { - super(globalScene, 0, slotId * 56); + super(globalScene, 0, slotId * 76); this.slotId = slotId; @@ -387,32 +497,89 @@ class SessionSlot extends Phaser.GameObjects.Container { } setup() { - const slotWindow = addWindow(0, 0, 304, 52); - this.add(slotWindow); + this.slotWindow = addWindow(0, 0, 304, 70); + this.add(this.slotWindow); - this.loadingLabel = addTextObject(152, 26, i18next.t("saveSlotSelectUiHandler:loading"), TextStyle.WINDOW); + this.loadingLabel = addTextObject(152, 33, i18next.t("saveSlotSelectUiHandler:loading"), TextStyle.WINDOW); this.loadingLabel.setOrigin(0.5, 0.5); this.add(this.loadingLabel); } + /** + * Generates a name for sessions that don't have a name yet. + * @param data - The {@linkcode SessionSaveData} being checked + * @returns The default name for the given data. + */ + decideFallback(data: SessionSaveData): string { + let fallbackName = `${GameMode.getModeName(data.gameMode)}`; + switch (data.gameMode) { + case GameModes.CLASSIC: + fallbackName += ` (${globalScene.gameData.gameStats.classicSessionsPlayed + 1})`; + break; + case GameModes.ENDLESS: + case GameModes.SPLICED_ENDLESS: + fallbackName += ` (${globalScene.gameData.gameStats.endlessSessionsPlayed + 1})`; + break; + case GameModes.DAILY: { + const runDay = new Date(data.timestamp).toLocaleDateString(); + fallbackName += ` (${runDay})`; + break; + } + case GameModes.CHALLENGE: { + const activeChallenges = data.challenges.filter(c => c.value !== 0); + if (activeChallenges.length === 0) { + break; + } + + fallbackName = ""; + for (const challenge of activeChallenges.slice(0, 3)) { + if (fallbackName !== "") { + fallbackName += ", "; + } + fallbackName += challenge.toChallenge().getName(); + } + + if (activeChallenges.length > 3) { + fallbackName += ", ..."; + } else if (fallbackName === "") { + // Something went wrong when retrieving the names of the active challenges, + // so fall back to just naming the run "Challenge" + fallbackName = `${GameMode.getModeName(data.gameMode)}`; + } + break; + } + } + return fallbackName; + } + async setupWithData(data: SessionSaveData) { + const hasName = data?.name; this.remove(this.loadingLabel, true); + if (hasName) { + const nameLabel = addTextObject(8, 5, data.name, TextStyle.WINDOW); + this.add(nameLabel); + } else { + const fallbackName = this.decideFallback(data); + await globalScene.gameData.renameSession(this.slotId, fallbackName); + const nameLabel = addTextObject(8, 5, fallbackName, TextStyle.WINDOW); + this.add(nameLabel); + } const gameModeLabel = addTextObject( 8, - 5, - `${GameMode.getModeName(data.gameMode) || i18next.t("gameMode:unkown")} - ${i18next.t("saveSlotSelectUiHandler:wave")} ${data.waveIndex}`, + 19, + `${GameMode.getModeName(data.gameMode) || i18next.t("gameMode:unknown")} - ${i18next.t("saveSlotSelectUiHandler:wave")} ${data.waveIndex}`, TextStyle.WINDOW, ); this.add(gameModeLabel); - const timestampLabel = addTextObject(8, 19, new Date(data.timestamp).toLocaleString(), TextStyle.WINDOW); + const timestampLabel = addTextObject(8, 33, new Date(data.timestamp).toLocaleString(), TextStyle.WINDOW); this.add(timestampLabel); - const playTimeLabel = addTextObject(8, 33, getPlayTimeString(data.playTime), TextStyle.WINDOW); + const playTimeLabel = addTextObject(8, 47, getPlayTimeString(data.playTime), TextStyle.WINDOW); this.add(playTimeLabel); - const pokemonIconsContainer = globalScene.add.container(144, 4); + const pokemonIconsContainer = globalScene.add.container(144, 16); data.party.forEach((p: PokemonData, i: number) => { const iconContainer = globalScene.add.container(26 * i, 0); iconContainer.setScale(0.75); @@ -427,13 +594,9 @@ class SessionSlot extends Phaser.GameObjects.Container { TextStyle.PARTY, { fontSize: "54px", color: "#f8f8f8" }, ); - text.setShadow(0, 0, undefined); - text.setStroke("#424242", 14); - text.setOrigin(1, 0); - - iconContainer.add(icon); - iconContainer.add(text); + text.setShadow(0, 0, undefined).setStroke("#424242", 14).setOrigin(1, 0); + iconContainer.add([icon, text]); pokemonIconsContainer.add(iconContainer); pokemon.destroy(); @@ -441,7 +604,7 @@ class SessionSlot extends Phaser.GameObjects.Container { this.add(pokemonIconsContainer); - const modifierIconsContainer = globalScene.add.container(148, 30); + const modifierIconsContainer = globalScene.add.container(148, 38); modifierIconsContainer.setScale(0.5); let visibleModifierIndex = 0; for (const m of data.modifiers) { @@ -464,22 +627,33 @@ class SessionSlot extends Phaser.GameObjects.Container { load(): Promise { return new Promise(resolve => { - globalScene.gameData.getSession(this.slotId).then(async sessionData => { - // Ignore the results if the view was exited - if (!this.active) { - return; - } - if (!sessionData) { - this.hasData = false; - this.loadingLabel.setText(i18next.t("saveSlotSelectUiHandler:empty")); - resolve(false); - return; - } - this.hasData = true; - this.saveData = sessionData; - await this.setupWithData(sessionData); - resolve(true); - }); + globalScene.gameData + .getSession(this.slotId) + .then(async sessionData => { + // Ignore the results if the view was exited + if (!this.active) { + return; + } + this.hasData = !!sessionData; + if (!sessionData) { + this.loadingLabel.setText(i18next.t("saveSlotSelectUiHandler:empty")); + resolve(false); + return; + } + this.saveData = sessionData; + this.setupWithData(sessionData); + resolve(true); + }) + .catch(e => { + if (!this.active) { + return; + } + console.warn(`Failed to load session slot #${this.slotId}:`, e); + this.loadingLabel.setText(i18next.t("menu:failedToLoadSession")); + this.hasData = true; + this.malformed = true; + resolve(true); + }); }); } } diff --git a/src/ui/saving-icon-handler.ts b/src/ui/saving-icon-handler.ts index 6923017218f..00c8b8b526c 100644 --- a/src/ui/saving-icon-handler.ts +++ b/src/ui/saving-icon-handler.ts @@ -8,7 +8,7 @@ export class SavingIconHandler extends Phaser.GameObjects.Container { private shown: boolean; constructor() { - super(globalScene, globalScene.game.canvas.width / 6 - 4, globalScene.game.canvas.height / 6 - 4); + super(globalScene, globalScene.scaledCanvas.width - 4, globalScene.scaledCanvas.height - 4); } setup(): void { diff --git a/src/ui/settings/abstract-binding-ui-handler.ts b/src/ui/settings/abstract-binding-ui-handler.ts index eb68456a69d..2c8d0eb63ba 100644 --- a/src/ui/settings/abstract-binding-ui-handler.ts +++ b/src/ui/settings/abstract-binding-ui-handler.ts @@ -8,7 +8,7 @@ import { UiHandler } from "#ui/ui-handler"; import { addWindow } from "#ui/ui-theme"; import i18next from "i18next"; -type CancelFn = (succes?: boolean) => boolean; +type CancelFn = (success?: boolean) => boolean; /** * Abstract class for handling UI elements related to button bindings. @@ -73,8 +73,8 @@ export abstract class AbstractBindingUiHandler extends UiHandler { // Setup backgrounds and text objects for UI. this.titleBg = addWindow( - globalScene.game.canvas.width / 6 - this.getWindowWidth(), - -(globalScene.game.canvas.height / 6) + 28 + 21, + globalScene.scaledCanvas.width - this.getWindowWidth(), + -globalScene.scaledCanvas.height + 28 + 21, this.getWindowWidth(), 24, ); @@ -82,8 +82,8 @@ export abstract class AbstractBindingUiHandler extends UiHandler { this.optionSelectContainer.add(this.titleBg); this.actionBg = addWindow( - globalScene.game.canvas.width / 6 - this.getWindowWidth(), - -(globalScene.game.canvas.height / 6) + this.getWindowHeight() + 28 + 21 + 21, + globalScene.scaledCanvas.width - this.getWindowWidth(), + -globalScene.scaledCanvas.height + this.getWindowHeight() + 28 + 21 + 21, this.getWindowWidth(), 24, ); @@ -102,8 +102,8 @@ export abstract class AbstractBindingUiHandler extends UiHandler { this.optionSelectContainer.add(this.timerText); this.optionSelectBg = addWindow( - globalScene.game.canvas.width / 6 - this.getWindowWidth(), - -(globalScene.game.canvas.height / 6) + this.getWindowHeight() + 28, + globalScene.scaledCanvas.width - this.getWindowWidth(), + -globalScene.scaledCanvas.height + this.getWindowHeight() + 28, this.getWindowWidth(), this.getWindowHeight(), ); diff --git a/src/ui/settings/abstract-control-settings-ui-handler.ts b/src/ui/settings/abstract-control-settings-ui-handler.ts index ee9e990ee2a..b40676fc97c 100644 --- a/src/ui/settings/abstract-control-settings-ui-handler.ts +++ b/src/ui/settings/abstract-control-settings-ui-handler.ts @@ -96,11 +96,11 @@ export abstract class AbstractControlSettingsUiHandler extends UiHandler { const ui = this.getUi(); this.navigationIcons = {}; - this.settingsContainer = globalScene.add.container(1, -(globalScene.game.canvas.height / 6) + 1); + this.settingsContainer = globalScene.add.container(1, -globalScene.scaledCanvas.height + 1); this.settingsContainer.setName(`settings-${this.titleSelected}`); this.settingsContainer.setInteractive( - new Phaser.Geom.Rectangle(0, 0, globalScene.game.canvas.width / 6, globalScene.game.canvas.height / 6), + new Phaser.Geom.Rectangle(0, 0, globalScene.scaledCanvas.width, globalScene.scaledCanvas.height), Phaser.Geom.Rectangle.Contains, ); @@ -109,15 +109,15 @@ export abstract class AbstractControlSettingsUiHandler extends UiHandler { this.optionsBg = addWindow( 0, this.navigationContainer.height, - globalScene.game.canvas.width / 6 - 2, - globalScene.game.canvas.height / 6 - 16 - this.navigationContainer.height - 2, + globalScene.scaledCanvas.width - 2, + globalScene.scaledCanvas.height - 16 - this.navigationContainer.height - 2, ); this.optionsBg.setOrigin(0, 0); this.actionsBg = addWindow( 0, - globalScene.game.canvas.height / 6 - this.navigationContainer.height, - globalScene.game.canvas.width / 6 - 2, + globalScene.scaledCanvas.height - this.navigationContainer.height, + globalScene.scaledCanvas.width - 2, 22, ); this.actionsBg.setOrigin(0, 0); @@ -597,7 +597,7 @@ export abstract class AbstractControlSettingsUiHandler extends UiHandler { // Check if the cursor object exists, if not, create it. if (!this.cursorObj) { - const cursorWidth = globalScene.game.canvas.width / 6 - (this.scrollBar.visible ? 16 : 10); + const cursorWidth = globalScene.scaledCanvas.width - (this.scrollBar.visible ? 16 : 10); this.cursorObj = globalScene.add.nineslice(0, 0, "summary_moves_cursor", undefined, cursorWidth, 16, 1, 1, 1, 1); this.cursorObj.setOrigin(0, 0); // Set the origin to the top-left corner. this.optionsContainer.add(this.cursorObj); // Add the cursor to the options container. diff --git a/src/ui/settings/abstract-settings-ui-handler.ts b/src/ui/settings/abstract-settings-ui-handler.ts index 81d733220fc..91d5aec984a 100644 --- a/src/ui/settings/abstract-settings-ui-handler.ts +++ b/src/ui/settings/abstract-settings-ui-handler.ts @@ -56,10 +56,10 @@ export class AbstractSettingsUiHandler extends MessageUiHandler { setup() { const ui = this.getUi(); - this.settingsContainer = globalScene.add.container(1, -(globalScene.game.canvas.height / 6) + 1); + this.settingsContainer = globalScene.add.container(1, -globalScene.scaledCanvas.height + 1); this.settingsContainer.setName(`settings-${this.title}`); this.settingsContainer.setInteractive( - new Phaser.Geom.Rectangle(0, 0, globalScene.game.canvas.width / 6, globalScene.game.canvas.height / 6 - 20), + new Phaser.Geom.Rectangle(0, 0, globalScene.scaledCanvas.width, globalScene.scaledCanvas.height - 20), Phaser.Geom.Rectangle.Contains, ); @@ -70,16 +70,16 @@ export class AbstractSettingsUiHandler extends MessageUiHandler { this.optionsBg = addWindow( 0, this.navigationContainer.height, - globalScene.game.canvas.width / 6 - 2, - globalScene.game.canvas.height / 6 - 16 - this.navigationContainer.height - 2, + globalScene.scaledCanvas.width - 2, + globalScene.scaledCanvas.height - 16 - this.navigationContainer.height - 2, ); this.optionsBg.setName("window-options-bg"); this.optionsBg.setOrigin(0, 0); const actionsBg = addWindow( 0, - globalScene.game.canvas.height / 6 - this.navigationContainer.height, - globalScene.game.canvas.width / 6 - 2, + globalScene.scaledCanvas.height - this.navigationContainer.height, + globalScene.scaledCanvas.width - 2, 22, ); actionsBg.setOrigin(0, 0); @@ -375,7 +375,7 @@ export class AbstractSettingsUiHandler extends MessageUiHandler { const ret = super.setCursor(cursor); if (!this.cursorObj) { - const cursorWidth = globalScene.game.canvas.width / 6 - (this.scrollBar.visible ? 16 : 10); + const cursorWidth = globalScene.scaledCanvas.width - (this.scrollBar.visible ? 16 : 10); this.cursorObj = globalScene.add.nineslice(0, 0, "summary_moves_cursor", undefined, cursorWidth, 16, 1, 1, 1, 1); this.cursorObj.setOrigin(0, 0); this.optionsContainer.add(this.cursorObj); diff --git a/src/ui/settings/navigation-menu.ts b/src/ui/settings/navigation-menu.ts index 2f3aa50f7f3..b889ce57b61 100644 --- a/src/ui/settings/navigation-menu.ts +++ b/src/ui/settings/navigation-menu.ts @@ -124,7 +124,7 @@ export class NavigationMenu extends Phaser.GameObjects.Container { */ setup() { const navigationManager = NavigationManager.getInstance(); - const headerBg = addWindow(0, 0, globalScene.game.canvas.width / 6 - 2, 24); + const headerBg = addWindow(0, 0, globalScene.scaledCanvas.width - 2, 24); headerBg.setOrigin(0, 0); this.add(headerBg); this.width = headerBg.width; diff --git a/src/ui/settings/option-select-ui-handler.ts b/src/ui/settings/option-select-ui-handler.ts index d7b699e6e50..c989c768244 100644 --- a/src/ui/settings/option-select-ui-handler.ts +++ b/src/ui/settings/option-select-ui-handler.ts @@ -1,5 +1,5 @@ import { UiMode } from "#enums/ui-mode"; -import { AbstractOptionSelectUiHandler } from "#ui/abstact-option-select-ui-handler"; +import { AbstractOptionSelectUiHandler } from "#ui/abstract-option-select-ui-handler"; export class OptionSelectUiHandler extends AbstractOptionSelectUiHandler { constructor(mode: UiMode = UiMode.OPTION_SELECT) { diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index dac6bc677a2..82467506720 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -16,7 +16,6 @@ import { POKERUS_STARTER_COUNT, speciesStarterCosts, } from "#balance/starters"; -import { applyChallenges, checkStarterValidForChallenge } from "#data/challenge"; import { allAbilities, allMoves, allSpecies } from "#data/data-lists"; import { Egg, getEggTierForSpecies } from "#data/egg"; import { GrowthRate, getGrowthRateColor } from "#data/exp"; @@ -46,9 +45,10 @@ import type { Variant } from "#sprites/variant"; import { getVariantIcon, getVariantTint } from "#sprites/variant"; import { achvs } from "#system/achv"; import type { DexAttrProps, StarterAttributes, StarterMoveset } from "#system/game-data"; +import { RibbonData } from "#system/ribbons/ribbon-data"; import { SettingKeyboard } from "#system/settings-keyboard"; import type { DexEntry } from "#types/dex-data"; -import type { OptionSelectItem } from "#ui/abstact-option-select-ui-handler"; +import type { OptionSelectItem } from "#ui/abstract-option-select-ui-handler"; import { DropDown, DropDownLabel, DropDownOption, DropDownState, DropDownType, SortCriteria } from "#ui/dropdown"; import { FilterBar } from "#ui/filter-bar"; import { MessageUiHandler } from "#ui/message-ui-handler"; @@ -59,6 +59,7 @@ import { StarterContainer } from "#ui/starter-container"; import { StatsContainer } from "#ui/stats-container"; import { addBBCodeTextObject, addTextObject } from "#ui/text"; import { addWindow } from "#ui/ui-theme"; +import { applyChallenges, checkStarterValidForChallenge } from "#utils/challenge-utils"; import { BooleanHolder, fixedInt, @@ -335,6 +336,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; @@ -407,70 +412,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); @@ -493,21 +461,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)), @@ -608,8 +579,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(); @@ -625,15 +594,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, @@ -641,18 +605,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, @@ -660,9 +621,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; @@ -677,19 +636,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, @@ -697,29 +652,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, @@ -727,16 +680,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 = []; @@ -746,54 +696,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[] = []; @@ -807,7 +737,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); } @@ -816,21 +746,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; @@ -846,109 +776,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); @@ -962,8 +857,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); @@ -974,18 +868,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); @@ -1001,143 +895,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("terastallize-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, @@ -1145,60 +999,122 @@ 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({ - scale: overlayScale, top: true, x: 1, - y: globalScene.game.canvas.height / 6 - MoveInfoOverlay.getHeight(overlayScale) - 29, + y: globalScene.scaledCanvas.height - MoveInfoOverlay.getHeight() - 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); @@ -1390,11 +1306,11 @@ 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 { - this.starterSelectMessageBoxContainer.setY(globalScene.game.canvas.height / 6); + this.starterSelectMessageBoxContainer.setY(globalScene.scaledCanvas.height); this.starterSelectMessageBox.setOrigin(0, 1); this.message.setY(singleLine ? -22 : -37); } @@ -1924,9 +1840,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, @@ -2409,9 +2325,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 { @@ -2453,8 +2367,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; } } @@ -2775,56 +2688,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; + } } } @@ -2867,12 +2788,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) { @@ -2896,11 +2819,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) { @@ -2998,8 +2923,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(); @@ -3022,7 +2949,7 @@ export class StarterSelectUiHandler extends MessageUiHandler { globalScene.gameData.getSpeciesDexAttrProps(species, tempFormProps), true, ); - allFormsValid = allFormsValid || isValidForChallenge; + allFormsValid ||= isValidForChallenge; } } else { const isValidForChallenge = checkStarterValidForChallenge( @@ -3286,6 +3213,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 = () => { @@ -3297,6 +3227,8 @@ export class StarterSelectUiHandler extends MessageUiHandler { onScreenFirstIndex + maxRows * maxColumns - 1, ); + const gameData = globalScene.gameData; + this.starterSelectScrollBar.setScrollCursor(this.scrollCursor); let pokerusCursorIndex = 0; @@ -3307,28 +3239,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; @@ -3336,9 +3268,9 @@ export class StarterSelectUiHandler extends MessageUiHandler { container.label.setVisible(true); const speciesVariants = - speciesId && globalScene.gameData.dexData[speciesId].caughtAttr & DexAttr.SHINY + speciesId && gameData.dexData[speciesId].caughtAttr & DexAttr.SHINY ? [DexAttr.DEFAULT_VARIANT, DexAttr.VARIANT_2, DexAttr.VARIANT_3].filter( - v => !!(globalScene.gameData.dexData[speciesId].caughtAttr & v), + v => !!(gameData.dexData[speciesId].caughtAttr & v), ) : []; for (let v = 0; v < 3; v++) { @@ -3353,12 +3285,15 @@ export class StarterSelectUiHandler extends MessageUiHandler { } } - container.starterPassiveBgs.setVisible(!!globalScene.gameData.starterData[speciesId].passiveAttr); + container.starterPassiveBgs.setVisible(!!gameData.starterData[speciesId].passiveAttr); container.hiddenAbilityIcon.setVisible( - !!globalScene.gameData.dexData[speciesId].caughtAttr && - !!(globalScene.gameData.starterData[speciesId].abilityAttr & 4), + !!gameData.dexData[speciesId].caughtAttr && !!(gameData.starterData[speciesId].abilityAttr & 4), ); - container.classicWinIcon.setVisible(globalScene.gameData.starterData[speciesId].classicWinCount > 0); + container.classicWinIcon + .setVisible(gameData.starterData[speciesId].classicWinCount > 0) + .setTexture( + gameData.dexData[speciesId].ribbons.has(RibbonData.NUZLOCKE) ? "champion_ribbon_emerald" : "champion_ribbon", + ); container.favoriteIcon.setVisible(this.starterPreferences[speciesId]?.favorite ?? false); // 'Candy Icon' mode @@ -3404,8 +3339,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(); } @@ -3433,8 +3367,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]); @@ -3525,9 +3462,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 @@ -3536,10 +3474,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); @@ -3557,16 +3495,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), ); @@ -3577,7 +3512,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); @@ -3586,14 +3520,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 @@ -3650,6 +3586,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); @@ -3850,19 +3791,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); @@ -3875,7 +3818,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); } @@ -3921,9 +3864,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(""); } @@ -3935,13 +3879,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)]; @@ -3968,14 +3911,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}`); @@ -3996,10 +3941,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(); @@ -4077,8 +4022,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(""); @@ -4111,8 +4057,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(); @@ -4121,14 +4068,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); } @@ -4146,17 +4091,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) { @@ -4177,7 +4123,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); @@ -4212,8 +4158,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)); } } @@ -4232,16 +4177,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( @@ -4249,7 +4193,7 @@ export class StarterSelectUiHandler extends MessageUiHandler { globalScene.gameData.getSpeciesDexAttrProps(species, this.getCurrentDexProps(species.speciesId)), false, ); - isPartyValid = isPartyValid || isNewPokemonValid; + isPartyValid ||= isNewPokemonValid; } /** @@ -4424,7 +4368,7 @@ export class StarterSelectUiHandler extends MessageUiHandler { globalScene.gameData.getSpeciesDexAttrProps(species, this.getCurrentDexProps(species.speciesId)), false, ); - canStart = canStart || isValidForChallenge; + canStart ||= isValidForChallenge; } return canStart; } @@ -4536,6 +4480,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); @@ -4585,8 +4531,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/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index b51bdfdb157..b6ce0a706f8 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -879,7 +879,7 @@ export class SummaryUiHandler extends UiHandler { !isNullOrUndefined(this.pokemon) ) { const teraIcon = globalScene.add.sprite(123, 26, "button_tera"); - teraIcon.setName("terrastallize-icon"); + teraIcon.setName("terastallize-icon"); teraIcon.setFrame(PokemonType[this.pokemon.getTeraType()].toLowerCase()); profileContainer.add(teraIcon); } diff --git a/src/ui/test-dialogue-ui-handler.ts b/src/ui/test-dialogue-ui-handler.ts index c57c73ca777..6f7c79a151b 100644 --- a/src/ui/test-dialogue-ui-handler.ts +++ b/src/ui/test-dialogue-ui-handler.ts @@ -1,6 +1,6 @@ import { UiMode } from "#enums/ui-mode"; import type { PlayerPokemon } from "#field/pokemon"; -import type { OptionSelectItem } from "#ui/abstact-option-select-ui-handler"; +import type { OptionSelectItem } from "#ui/abstract-option-select-ui-handler"; 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"; @@ -13,7 +13,7 @@ export class TestDialogueUiHandler extends FormModalUiHandler { setup() { super.setup(); - const flattenKeys = (object?: any, topKey?: string, midleKey?: string[]): Array => { + const flattenKeys = (object?: any, topKey?: string, middleKey?: string[]): Array => { return Object.keys(object ?? {}) .map((t, i) => { const value = Object.values(object)[i]; @@ -23,7 +23,7 @@ export class TestDialogueUiHandler extends FormModalUiHandler { // If the value is an object, execute the same process // si el valor es un objeto ejecuta el mismo proceso - return flattenKeys(value, topKey ?? t, topKey ? (midleKey ? [...midleKey, t] : [t]) : undefined).filter( + return flattenKeys(value, topKey ?? t, topKey ? (middleKey ? [...middleKey, t] : [t]) : undefined).filter( t => t.length > 0, ); } @@ -31,7 +31,7 @@ export class TestDialogueUiHandler extends FormModalUiHandler { // we check for null or undefined here as per above - the typeof is still an object but the value is null so we need to exit out of this and pass the null key // Return in the format expected by i18next - return midleKey ? `${topKey}:${midleKey.map(m => m).join(".")}.${t}` : `${topKey}:${t}`; + return middleKey ? `${topKey}:${middleKey.join(".")}.${t}` : `${topKey}:${t}`; } }) .filter(t => t); diff --git a/src/ui/title-ui-handler.ts b/src/ui/title-ui-handler.ts index 66cb69f6a26..36e37500a64 100644 --- a/src/ui/title-ui-handler.ts +++ b/src/ui/title-ui-handler.ts @@ -1,4 +1,5 @@ import { pokerogueApi } from "#api/pokerogue-api"; +import { FAKE_TITLE_LOGO_CHANCE } from "#app/constants"; import { timedEventManager } from "#app/global-event-manager"; import { globalScene } from "#app/global-scene"; import { TimedEventDisplay } from "#app/timed-event-manager"; @@ -36,12 +37,12 @@ export class TitleUiHandler extends OptionSelectUiHandler { const ui = this.getUi(); - this.titleContainer = globalScene.add.container(0, -(globalScene.game.canvas.height / 6)); + this.titleContainer = globalScene.add.container(0, -globalScene.scaledCanvas.height); this.titleContainer.setName("title"); this.titleContainer.setAlpha(0); ui.add(this.titleContainer); - const logo = globalScene.add.image(globalScene.game.canvas.width / 6 / 2, 8, "logo"); + const logo = globalScene.add.image(globalScene.scaledCanvas.width / 2, 8, this.getLogo()); logo.setOrigin(0.5, 0); this.titleContainer.add(logo); @@ -53,7 +54,7 @@ export class TitleUiHandler extends OptionSelectUiHandler { this.playerCountLabel = addTextObject( // Actual y position will be determined after the title menu has been populated with options - globalScene.game.canvas.width / 6 - 2, + globalScene.scaledCanvas.width - 2, 0, `? ${i18next.t("menu:playersOnline")}`, TextStyle.MESSAGE, @@ -131,7 +132,7 @@ export class TitleUiHandler extends OptionSelectUiHandler { if (ret) { // Moving player count to top of the menu - this.playerCountLabel.setY(globalScene.game.canvas.height / 6 - 13 - this.getWindowHeight()); + this.playerCountLabel.setY(globalScene.scaledCanvas.height - 13 - this.getWindowHeight()); this.splashMessage = randItem(getSplashMessages()); this.splashMessageText.setText( @@ -186,4 +187,14 @@ export class TitleUiHandler extends OptionSelectUiHandler { ease: "Sine.easeInOut", }); } + + /** + * Get the logo file path to load, with a 0.1% chance to use the fake logo instead. + * @returns The path to the image. + */ + private getLogo(): string { + // Invert spawn chances on april fools + const aprilFools = timedEventManager.isAprilFoolsActive(); + return aprilFools === !!randInt(FAKE_TITLE_LOGO_CHANCE) ? "logo_fake" : "logo"; + } } diff --git a/src/ui/ui.ts b/src/ui/ui.ts index 4c8f0613122..e381d205b78 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"; @@ -59,6 +60,7 @@ import { addWindow } from "#ui/ui-theme"; import { UnavailableModalUiHandler } from "#ui/unavailable-modal-ui-handler"; import { executeIf } from "#utils/common"; import i18next from "i18next"; +import { RenameRunFormUiHandler } from "./rename-run-ui-handler"; const transitionModes = [ UiMode.SAVE_SLOT, @@ -97,11 +99,13 @@ const noTransitionModes = [ UiMode.SESSION_RELOAD, UiMode.UNAVAILABLE, UiMode.RENAME_POKEMON, + UiMode.RENAME_RUN, UiMode.TEST_DIALOGUE, UiMode.AUTO_COMPLETE, UiMode.ADMIN, UiMode.MYSTERY_ENCOUNTER, UiMode.RUN_INFO, + UiMode.CHANGE_PASSWORD_FORM, ]; export class UI extends Phaser.GameObjects.Container { @@ -121,7 +125,7 @@ export class UI extends Phaser.GameObjects.Container { private overlayActive: boolean; constructor() { - super(globalScene, 0, globalScene.game.canvas.height / 6); + super(globalScene, 0, globalScene.scaledCanvas.height); this.mode = UiMode.MESSAGE; this.modeChain = []; @@ -166,12 +170,14 @@ export class UI extends Phaser.GameObjects.Container { new UnavailableModalUiHandler(), new GameChallengesUiHandler(), new RenameFormUiHandler(), + new RenameRunFormUiHandler(), new RunHistoryUiHandler(), new RunInfoUiHandler(), new TestDialogueUiHandler(UiMode.TEST_DIALOGUE), new AutoCompleteUiHandler(), new AdminUiHandler(), new MysteryEncounterUiHandler(), + new ChangePasswordFormUiHandler(), ]; } @@ -180,13 +186,7 @@ export class UI extends Phaser.GameObjects.Container { for (const handler of this.handlers) { handler.setup(); } - this.overlay = globalScene.add.rectangle( - 0, - 0, - globalScene.game.canvas.width / 6, - globalScene.game.canvas.height / 6, - 0, - ); + this.overlay = globalScene.add.rectangle(0, 0, globalScene.scaledCanvas.width, globalScene.scaledCanvas.height, 0); this.overlay.setName("rect-ui-overlay"); this.overlay.setOrigin(0, 0); globalScene.uiContainer.add(this.overlay); @@ -437,15 +437,15 @@ export class UI extends Phaser.GameObjects.Container { if (isTouch) { // If we are in the top left quadrant on mobile, move the tooltip to the top right corner if (pointerX <= globalScene.game.canvas.width / 2 && pointerY <= globalScene.game.canvas.height / 2) { - x = globalScene.game.canvas.width / 6 - tooltipWidth - padding; + x = globalScene.scaledCanvas.width - tooltipWidth - padding; } } else { // If the tooltip would go offscreen on the right, or is close to it, move to the left of the cursor - if (x + tooltipWidth + padding > globalScene.game.canvas.width / 6) { + if (x + tooltipWidth + padding > globalScene.scaledCanvas.width) { x = Math.max(padding, pointerX / 6 - tooltipWidth - padding); } // If the tooltip would go offscreen at the bottom, or is close to it, move above the cursor - if (y + tooltipHeight + padding > globalScene.game.canvas.height / 6) { + if (y + tooltipHeight + padding > globalScene.scaledCanvas.height) { y = Math.max(padding, pointerY / 6 - tooltipHeight - padding); } } diff --git a/src/utils/challenge-utils.ts b/src/utils/challenge-utils.ts new file mode 100644 index 00000000000..c4fac3a0323 --- /dev/null +++ b/src/utils/challenge-utils.ts @@ -0,0 +1,435 @@ +import type { FixedBattleConfig } from "#app/battle"; +import { globalScene } from "#app/global-scene"; +import { pokemonEvolutions } from "#balance/pokemon-evolutions"; +import { pokemonFormChanges } from "#data/pokemon-forms"; +import type { PokemonSpecies } from "#data/pokemon-species"; +import { ChallengeType } from "#enums/challenge-type"; +import { Challenges } from "#enums/challenges"; +import type { MoveId } from "#enums/move-id"; +import type { MoveSourceType } from "#enums/move-source-type"; +import type { SpeciesId } from "#enums/species-id"; +import type { EnemyPokemon, PlayerPokemon, Pokemon } from "#field/pokemon"; +import type { ModifierTypeOption } from "#modifiers/modifier-type"; +import type { DexAttrProps } from "#system/game-data"; +import { BooleanHolder, type NumberHolder } from "./common"; +import { getPokemonSpecies } from "./pokemon-utils"; + +/** + * @param challengeType - {@linkcode ChallengeType.STARTER_CHOICE} + * @param pokemon - The {@linkcode PokemonSpecies} to check the validity of + * @param valid - A {@linkcode BooleanHolder} holding the checked species' validity; + * will be set to `false` if the species is disallowed + * @param dexAttr - The {@linkcode DexAttrProps | Dex attributes} of the species + * @returns `true` if any challenge was successfully applied + */ +export function applyChallenges( + challengeType: ChallengeType.STARTER_CHOICE, + pokemon: PokemonSpecies, + valid: BooleanHolder, + dexAttr: DexAttrProps, +): boolean; +/** + * Apply all challenges that modify available total starter points. + * @param challengeType {@link ChallengeType} ChallengeType.STARTER_POINTS + * @param points {@link NumberHolder} The amount of points you have available. + * @returns True if any challenge was successfully applied. + */ +export function applyChallenges(challengeType: ChallengeType.STARTER_POINTS, points: NumberHolder): boolean; +/** + * Apply all challenges that modify the cost of a starter. + * @param challengeType {@link ChallengeType} ChallengeType.STARTER_COST + * @param species {@link SpeciesId} The pokemon to change the cost of. + * @param points {@link NumberHolder} The cost of the pokemon. + * @returns True if any challenge was successfully applied. + */ +export function applyChallenges( + challengeType: ChallengeType.STARTER_COST, + species: SpeciesId, + cost: NumberHolder, +): boolean; +/** + * Apply all challenges that modify a starter after selection. + * @param challengeType {@link ChallengeType} ChallengeType.STARTER_MODIFY + * @param pokemon {@link Pokemon} The starter pokemon to modify. + * @returns True if any challenge was successfully applied. + */ +export function applyChallenges(challengeType: ChallengeType.STARTER_MODIFY, pokemon: Pokemon): boolean; +/** + * Apply all challenges that what pokemon you can have in battle. + * @param challengeType {@link ChallengeType} ChallengeType.POKEMON_IN_BATTLE + * @param pokemon {@link Pokemon} The pokemon to check the validity of. + * @param valid {@link BooleanHolder} A BooleanHolder, the value gets set to false if the pokemon isn't allowed. + * @returns True if any challenge was successfully applied. + */ +export function applyChallenges( + challengeType: ChallengeType.POKEMON_IN_BATTLE, + pokemon: Pokemon, + valid: BooleanHolder, +): boolean; +/** + * Apply all challenges that modify what fixed battles there are. + * @param challengeType {@link ChallengeType} ChallengeType.FIXED_BATTLES + * @param waveIndex {@link Number} The current wave index. + * @param battleConfig {@link FixedBattleConfig} The battle config to modify. + * @returns True if any challenge was successfully applied. + */ +export function applyChallenges( + challengeType: ChallengeType.FIXED_BATTLES, + waveIndex: number, + battleConfig: FixedBattleConfig, +): boolean; +/** + * Apply all challenges that modify type effectiveness. + * @param challengeType {@linkcode ChallengeType} ChallengeType.TYPE_EFFECTIVENESS + * @param effectiveness {@linkcode NumberHolder} The current effectiveness of the move. + * @returns True if any challenge was successfully applied. + */ +export function applyChallenges(challengeType: ChallengeType.TYPE_EFFECTIVENESS, effectiveness: NumberHolder): boolean; +/** + * Apply all challenges that modify what level AI are. + * @param challengeType {@link ChallengeType} ChallengeType.AI_LEVEL + * @param level {@link NumberHolder} The generated level of the pokemon. + * @param levelCap {@link Number} The maximum level cap for the current wave. + * @param isTrainer {@link Boolean} Whether this is a trainer pokemon. + * @param isBoss {@link Boolean} Whether this is a non-trainer boss pokemon. + * @returns True if any challenge was successfully applied. + */ +export function applyChallenges( + challengeType: ChallengeType.AI_LEVEL, + level: NumberHolder, + levelCap: number, + isTrainer: boolean, + isBoss: boolean, +): boolean; +/** + * Apply all challenges that modify how many move slots the AI has. + * @param challengeType {@link ChallengeType} ChallengeType.AI_MOVE_SLOTS + * @param pokemon {@link Pokemon} The pokemon being considered. + * @param moveSlots {@link NumberHolder} The amount of move slots. + * @returns True if any challenge was successfully applied. + */ +export function applyChallenges( + challengeType: ChallengeType.AI_MOVE_SLOTS, + pokemon: Pokemon, + moveSlots: NumberHolder, +): boolean; +/** + * Apply all challenges that modify whether a pokemon has its passive. + * @param challengeType {@link ChallengeType} ChallengeType.PASSIVE_ACCESS + * @param pokemon {@link Pokemon} The pokemon to modify. + * @param hasPassive {@link BooleanHolder} Whether it has its passive. + * @returns True if any challenge was successfully applied. + */ +export function applyChallenges( + challengeType: ChallengeType.PASSIVE_ACCESS, + pokemon: Pokemon, + hasPassive: BooleanHolder, +): boolean; +/** + * Apply all challenges that modify the game modes settings. + * @param challengeType {@link ChallengeType} ChallengeType.GAME_MODE_MODIFY + * @returns True if any challenge was successfully applied. + */ +export function applyChallenges(challengeType: ChallengeType.GAME_MODE_MODIFY): boolean; +/** + * Apply all challenges that modify what level a pokemon can access a move. + * @param challengeType {@link ChallengeType} ChallengeType.MOVE_ACCESS + * @param pokemon {@link Pokemon} What pokemon would learn the move. + * @param moveSource {@link MoveSourceType} What source the pokemon would get the move from. + * @param move {@link MoveId} The move in question. + * @param level {@link NumberHolder} The level threshold for access. + * @returns True if any challenge was successfully applied. + */ +export function applyChallenges( + challengeType: ChallengeType.MOVE_ACCESS, + pokemon: Pokemon, + moveSource: MoveSourceType, + move: MoveId, + level: NumberHolder, +): boolean; +/** + * Apply all challenges that modify what weight a pokemon gives to move generation + * @param challengeType {@link ChallengeType} ChallengeType.MOVE_WEIGHT + * @param pokemon {@link Pokemon} What pokemon would learn the move. + * @param moveSource {@link MoveSourceType} What source the pokemon would get the move from. + * @param move {@link MoveId} The move in question. + * @param weight {@link NumberHolder} The weight of the move. + * @returns True if any challenge was successfully applied. + */ +export function applyChallenges( + challengeType: ChallengeType.MOVE_WEIGHT, + pokemon: Pokemon, + moveSource: MoveSourceType, + move: MoveId, + weight: NumberHolder, +): boolean; + +export function applyChallenges(challengeType: ChallengeType.FLIP_STAT, pokemon: Pokemon, baseStats: number[]): boolean; + +/** + * Apply all challenges that conditionally enable or disable automatic party healing during biome transitions + * @param challengeType - {@linkcode ChallengeType.PARTY_HEAL} + * @param status - Whether party healing is enabled or not + * @returns `true` if any challenge was successfully applied, `false` otherwise + */ +export function applyChallenges(challengeType: ChallengeType.PARTY_HEAL, status: BooleanHolder): boolean; + +/** + * Apply all challenges that conditionally enable or disable the shop + * @param challengeType - {@linkcode ChallengeType.SHOP} + * @param status - Whether party healing is enabled or not + * @returns `true` if any challenge was successfully applied, `false` otherwise + */ +export function applyChallenges(challengeType: ChallengeType.SHOP, status: BooleanHolder): boolean; + +/** + * Apply all challenges that validate whether a pokemon can be added to the player's party or not + * @param challengeType - {@linkcode ChallengeType.POKEMON_ADD_TO_PARTY} + * @param pokemon - The pokemon being caught + * @param status - Whether the pokemon can be added to the party or not + * @return `true` if any challenge was sucessfully applied, `false` otherwise + */ +export function applyChallenges( + challengeType: ChallengeType.POKEMON_ADD_TO_PARTY, + pokemon: EnemyPokemon, + status: BooleanHolder, +): boolean; + +/** + * Apply all challenges that validate whether a pokemon is allowed to fuse or not + * @param challengeType - {@linkcode ChallengeType.POKEMON_FUSION} + * @param pokemon - The pokemon being checked + * @param status - Whether the selected pokemon is allowed to fuse or not + * @return `true` if any challenge was sucessfully applied, `false` otherwise + */ +export function applyChallenges( + challengeType: ChallengeType.POKEMON_FUSION, + pokemon: PlayerPokemon, + status: BooleanHolder, +): boolean; + +/** + * Apply all challenges that validate whether particular moves can or cannot be used + * @param challengeType - {@linkcode ChallengeType.POKEMON_MOVE} + * @param moveId - The move being checked + * @param status - Whether the move can be used or not + * @return `true` if any challenge was sucessfully applied, `false` otherwise + */ +export function applyChallenges( + challengeType: ChallengeType.POKEMON_MOVE, + moveId: MoveId, + status: BooleanHolder, +): boolean; + +/** + * Apply all challenges that validate whether particular items are or are not sold in the shop + * @param challengeType - {@linkcode ChallengeType.SHOP_ITEM} + * @param shopItem - The item being checked + * @param status - Whether the item should be added to the shop or not + * @return `true` if any challenge was sucessfully applied, `false` otherwise + */ +export function applyChallenges( + challengeType: ChallengeType.SHOP_ITEM, + shopItem: ModifierTypeOption | null, + status: BooleanHolder, +): boolean; + +/** + * Apply all challenges that validate whether particular items will be given as a reward after a wave + * @param challengeType - {@linkcode ChallengeType.WAVE_REWARD} + * @param reward - The reward being checked + * @param status - Whether the reward should be added to the reward options or not + * @return `true` if any challenge was sucessfully applied, `false` otherwise + */ +export function applyChallenges( + challengeType: ChallengeType.WAVE_REWARD, + reward: ModifierTypeOption | null, + status: BooleanHolder, +): boolean; + +/** + * Apply all challenges that prevent recovery from fainting + * @param challengeType - {@linkcode ChallengeType.PREVENT_REVIVE} + * @param status - Whether fainting is a permanent status or not + * @return `true` if any challenge was sucessfully applied, `false` otherwise + */ +export function applyChallenges(challengeType: ChallengeType.PREVENT_REVIVE, status: BooleanHolder): boolean; + +export function applyChallenges(challengeType: ChallengeType, ...args: any[]): boolean { + let ret = false; + globalScene.gameMode.challenges.forEach(c => { + if (c.value !== 0) { + switch (challengeType) { + case ChallengeType.STARTER_CHOICE: + ret ||= c.applyStarterChoice(args[0], args[1], args[2]); + break; + case ChallengeType.STARTER_POINTS: + ret ||= c.applyStarterPoints(args[0]); + break; + case ChallengeType.STARTER_COST: + ret ||= c.applyStarterCost(args[0], args[1]); + break; + case ChallengeType.STARTER_MODIFY: + ret ||= c.applyStarterModify(args[0]); + break; + case ChallengeType.POKEMON_IN_BATTLE: + ret ||= c.applyPokemonInBattle(args[0], args[1]); + break; + case ChallengeType.FIXED_BATTLES: + ret ||= c.applyFixedBattle(args[0], args[1]); + break; + case ChallengeType.TYPE_EFFECTIVENESS: + ret ||= c.applyTypeEffectiveness(args[0]); + break; + case ChallengeType.AI_LEVEL: + ret ||= c.applyLevelChange(args[0], args[1], args[2], args[3]); + break; + case ChallengeType.AI_MOVE_SLOTS: + ret ||= c.applyMoveSlot(args[0], args[1]); + break; + case ChallengeType.PASSIVE_ACCESS: + ret ||= c.applyPassiveAccess(args[0], args[1]); + break; + case ChallengeType.GAME_MODE_MODIFY: + ret ||= c.applyGameModeModify(); + break; + case ChallengeType.MOVE_ACCESS: + ret ||= c.applyMoveAccessLevel(args[0], args[1], args[2], args[3]); + break; + case ChallengeType.MOVE_WEIGHT: + ret ||= c.applyMoveWeight(args[0], args[1], args[2], args[3]); + break; + case ChallengeType.FLIP_STAT: + ret ||= c.applyFlipStat(args[0], args[1]); + break; + case ChallengeType.PARTY_HEAL: + ret ||= c.applyPartyHeal(args[0]); + break; + case ChallengeType.SHOP: + ret ||= c.applyShop(args[0]); + break; + case ChallengeType.POKEMON_ADD_TO_PARTY: + ret ||= c.applyPokemonAddToParty(args[0], args[1]); + break; + case ChallengeType.POKEMON_FUSION: + ret ||= c.applyPokemonFusion(args[0], args[1]); + break; + case ChallengeType.POKEMON_MOVE: + ret ||= c.applyPokemonMove(args[0], args[1]); + break; + case ChallengeType.SHOP_ITEM: + ret ||= c.applyShopItem(args[0], args[1]); + break; + case ChallengeType.WAVE_REWARD: + ret ||= c.applyWaveReward(args[0], args[1]); + break; + case ChallengeType.PREVENT_REVIVE: + ret ||= c.applyPreventRevive(args[0]); + break; + } + } + }); + return ret; +} + +/** + * Apply all challenges to the given starter (and form) to check its validity. + * Differs from {@linkcode checkSpeciesValidForChallenge} which only checks form changes. + * @param species - The {@linkcode PokemonSpecies} to check the validity of. + * @param dexAttr - The {@linkcode DexAttrProps | dex attributes} of the species, including its form index. + * @param soft - If `true`, allow it if it could become valid through evolution or form change. + * @returns `true` if the species is considered valid. + */ +export function checkStarterValidForChallenge(species: PokemonSpecies, props: DexAttrProps, soft: boolean) { + if (!soft) { + const isValidForChallenge = new BooleanHolder(true); + applyChallenges(ChallengeType.STARTER_CHOICE, species, isValidForChallenge, props); + return isValidForChallenge.value; + } + // We check the validity of every evolution and form change, and require that at least one is valid + const speciesToCheck = [species.speciesId]; + while (speciesToCheck.length) { + const checking = speciesToCheck.pop(); + // Linter complains if we don't handle this + if (!checking) { + return false; + } + const checkingSpecies = getPokemonSpecies(checking); + if (checkSpeciesValidForChallenge(checkingSpecies, props, true)) { + return true; + } + if (checking && pokemonEvolutions.hasOwnProperty(checking)) { + pokemonEvolutions[checking].forEach(e => { + // Form check to deal with cases such as Basculin -> Basculegion + // TODO: does this miss anything if checking forms of a stage 2 Pokémon? + if (!e?.preFormKey || e.preFormKey === species.forms[props.formIndex].formKey) { + speciesToCheck.push(e.speciesId); + } + }); + } + } + return false; +} + +/** + * Apply all challenges to the given species (and form) to check its validity. + * Differs from {@linkcode checkStarterValidForChallenge} which also checks evolutions. + * @param species - The {@linkcode PokemonSpecies} to check the validity of. + * @param dexAttr - The {@linkcode DexAttrProps | dex attributes} of the species, including its form index. + * @param soft - If `true`, allow it if it could become valid through a form change. + * @returns `true` if the species is considered valid. + */ +export function checkSpeciesValidForChallenge(species: PokemonSpecies, props: DexAttrProps, soft: boolean) { + const isValidForChallenge = new BooleanHolder(true); + applyChallenges(ChallengeType.STARTER_CHOICE, species, isValidForChallenge, props); + if (!soft || !pokemonFormChanges.hasOwnProperty(species.speciesId)) { + return isValidForChallenge.value; + } + // If the form in props is valid, return true before checking other form changes + if (soft && isValidForChallenge.value) { + return true; + } + + const result = pokemonFormChanges[species.speciesId].some(f1 => { + // Exclude form changes that require the mon to be on the field to begin with + if (!("item" in f1.trigger)) { + return false; + } + + return species.forms.some((f2, formIndex) => { + if (f1.formKey === f2.formKey) { + const formProps = { ...props, formIndex }; + const isFormValidForChallenge = new BooleanHolder(true); + applyChallenges(ChallengeType.STARTER_CHOICE, species, isFormValidForChallenge, formProps); + return isFormValidForChallenge.value; + } + return false; + }); + }); + return result; +} + +/** @returns Whether the current game mode meets the criteria to be considered a Nuzlocke challenge */ +export function isNuzlockeChallenge(): boolean { + let isFreshStart = false; + let isLimitedCatch = false; + let isHardcore = false; + for (const challenge of globalScene.gameMode.challenges) { + // value is 0 if challenge is not active + if (!challenge.value) { + continue; + } + switch (challenge.id) { + case Challenges.FRESH_START: + isFreshStart = true; + break; + case Challenges.LIMITED_CATCH: + isLimitedCatch = true; + break; + case Challenges.HARDCORE: + isHardcore = true; + break; + } + } + return isFreshStart && isLimitedCatch && isHardcore; +} diff --git a/src/utils/common.ts b/src/utils/common.ts index 1c75dac93b4..aac1ef359e6 100644 --- a/src/utils/common.ts +++ b/src/utils/common.ts @@ -70,12 +70,16 @@ export function padInt(value: number, length: number, padWith?: string): string } /** - * Returns a random integer between min and min + range - * @param range The amount of possible numbers - * @param min The starting number + * Returns a **completely unseeded** random integer between `min` and `min + range`. + * @param range - The amount of possible numbers to pick + * @param min - The minimum number to pick; default `0` + * @returns A psuedo-random, unseeded integer within the interval [min, min+range]. + * @remarks + * This should not be used for battles or other outwards-facing randomness; + * battles are intended to be seeded and deterministic. */ export function randInt(range: number, min = 0): number { - if (range === 1) { + if (range <= 1) { return min; } return Math.floor(Math.random() * range) + min; diff --git a/src/utils/data.ts b/src/utils/data.ts index 932ea38d504..6580ecf2ee9 100644 --- a/src/utils/data.ts +++ b/src/utils/data.ts @@ -45,17 +45,17 @@ export function deepMergeSpriteData(dest: object, source: object) { } export function encrypt(data: string, bypassLogin: boolean): string { - return (bypassLogin - ? (data: string) => btoa(encodeURIComponent(data)) - : (data: string) => AES.encrypt(data, saveKey))(data) as unknown as string; // TODO: is this correct? + if (bypassLogin) { + return btoa(encodeURIComponent(data)); + } + return AES.encrypt(data, saveKey).toString(); } export function decrypt(data: string, bypassLogin: boolean): string { - return ( - bypassLogin - ? (data: string) => decodeURIComponent(atob(data)) - : (data: string) => AES.decrypt(data, saveKey).toString(enc.Utf8) - )(data); + if (bypassLogin) { + return decodeURIComponent(atob(data)); + } + return AES.decrypt(data, saveKey).toString(enc.Utf8); } // the latest data saved/loaded for the Starter Preferences. Required to reduce read/writes. Initialize as "{}", since this is the default value and no data needs to be stored if present. diff --git a/test/@types/test-helpers.ts b/test/@types/test-helpers.ts new file mode 100644 index 00000000000..b867eb32570 --- /dev/null +++ b/test/@types/test-helpers.ts @@ -0,0 +1,27 @@ +import type { AtLeastOne, NonFunctionPropertiesRecursive as nonFunc } from "#types/type-helpers"; + +/** + * Helper type to admit an object containing the given properties + * _and_ at least 1 other non-function property. + * @example + * ```ts + * type foo = { + * qux: 1 | 2 | 3, + * bar: number, + * baz: string + * quux: () => void; // ignored! + * } + * + * type quxAndSomethingElse = OneOther + * + * const good1: quxAndSomethingElse = {qux: 1, bar: 3} // OK! + * const good2: quxAndSomethingElse = {qux: 2, baz: "4", bar: 12} // OK! + * const bad1: quxAndSomethingElse = {baz: "4", bar: 12} // Errors because `qux` is required + * const bad2: quxAndSomethingElse = {qux: 1} // Errors because at least 1 thing _other_ than `qux` is required + * ``` + * @typeParam O - The object to source keys from + * @typeParam K - One or more of O's keys to render mandatory + */ +export type OneOther = AtLeastOne, K>> & { + [key in K]: O[K]; +}; diff --git a/test/@types/vitest.d.ts b/test/@types/vitest.d.ts index 7b756c45a57..21cf76ed352 100644 --- a/test/@types/vitest.d.ts +++ b/test/@types/vitest.d.ts @@ -1,23 +1,32 @@ import type { TerrainType } from "#app/data/terrain"; +import type Overrides from "#app/overrides"; +import type { ArenaTag } from "#data/arena-tag"; +import type { PositionalTag } from "#data/positional-tags/positional-tag"; import type { AbilityId } from "#enums/ability-id"; +import type { ArenaTagSide } from "#enums/arena-tag-side"; +import type { ArenaTagType } from "#enums/arena-tag-type"; import type { BattlerTagType } from "#enums/battler-tag-type"; import type { MoveId } from "#enums/move-id"; import type { PokemonType } from "#enums/pokemon-type"; +import type { PositionalTagType } from "#enums/positional-tag-type"; import type { BattleStat, EffectiveStat, Stat } from "#enums/stat"; import type { StatusEffect } from "#enums/status-effect"; import type { WeatherType } from "#enums/weather-type"; +import type { Arena } from "#field/arena"; import type { Pokemon } from "#field/pokemon"; -import type { ToHaveEffectiveStatMatcherOptions } from "#test/test-utils/matchers/to-have-effective-stat"; +import type { PokemonMove } from "#moves/pokemon-move"; +import type { toHaveArenaTagOptions } from "#test/test-utils/matchers/to-have-arena-tag"; +import type { toHaveEffectiveStatOptions } from "#test/test-utils/matchers/to-have-effective-stat"; +import type { toHavePositionalTagOptions } from "#test/test-utils/matchers/to-have-positional-tag"; 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 { toDmgValue } from "utils/common"; import type { expect } from "vitest"; -import type Overrides from "#app/overrides"; -import type { PokemonMove } from "#moves/pokemon-move"; declare module "vitest" { - interface Assertion { + interface Assertion { /** * Check whether an array contains EXACTLY the given items (in any order). * @@ -27,45 +36,9 @@ declare module "vitest" { * @param expected - The expected contents of the array, in any order * @see {@linkcode expect.arrayContaining} */ - toEqualArrayUnsorted(expected: E[]): void; + toEqualArrayUnsorted(expected: T[]): void; - /** - * 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 - */ - 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; + // #region Arena Matchers /** * Check whether the current {@linkcode WeatherType} is as expected. @@ -80,9 +53,60 @@ declare module "vitest" { toHaveTerrain(expectedTerrainType: TerrainType): void; /** - * Check whether a {@linkcode Pokemon} is at full HP. + * Check whether the current {@linkcode Arena} contains the given {@linkcode ArenaTag}. + * @param expectedTag - A partially-filled {@linkcode ArenaTag} containing the desired properties */ - toHaveFullHp(): void; + toHaveArenaTag(expectedTag: toHaveArenaTagOptions): void; + /** + * Check whether the current {@linkcode Arena} contains the given {@linkcode ArenaTag}. + * @param expectedType - The {@linkcode ArenaTagType} of the desired tag + * @param side - The {@linkcode ArenaTagSide | side(s) of the field} the tag should affect; default {@linkcode ArenaTagSide.BOTH} + */ + toHaveArenaTag(expectedType: ArenaTagType, side?: ArenaTagSide): void; + + /** + * Check whether the current {@linkcode Arena} contains the given {@linkcode PositionalTag}. + * @param expectedTag - A partially-filled `PositionalTag` containing the desired properties + */ + toHavePositionalTag

(expectedTag: toHavePositionalTagOptions

): void; + /** + * Check whether the current {@linkcode Arena} contains the given number of {@linkcode PositionalTag}s. + * @param expectedType - The {@linkcode PositionalTagType} of the desired tag + * @param count - The number of instances of {@linkcode expectedType} that should be active; + * defaults to `1` and must be within the range `[0, 4]` + */ + toHavePositionalTag(expectedType: PositionalTagType, count?: number): void; + + // #endregion Arena Matchers + + // #region Pokemon Matchers + + /** + * Check whether a {@linkcode Pokemon}'s current typing includes the given types. + * @param expectedTypes - The expected {@linkcode PokemonType}s to check against; must have length `>0` + * @param options - The {@linkcode toHaveTypesOptions | options} passed to the matcher + */ + toHaveTypes(expectedTypes: PokemonType[], options?: toHaveTypesOptions): void; + + /** + * Check whether a {@linkcode Pokemon} has used a move matching the given criteria. + * @param expectedMove - 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` + * @see {@linkcode Pokemon.getLastXMoves} + */ + toHaveUsedMove(expectedMove: 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 - The {@linkcode toHaveEffectiveStatOptions | options} passed to the matcher + * @remarks + * If you want to check the stat **before** modifiers are applied, use {@linkcode Pokemon.getStat} instead. + */ + toHaveEffectiveStat(stat: EffectiveStat, expectedValue: number, options?: toHaveEffectiveStatOptions): void; /** * Check whether a {@linkcode Pokemon} has a specific {@linkcode StatusEffect | non-volatile status effect}. @@ -106,7 +130,7 @@ declare module "vitest" { /** * Check whether a {@linkcode Pokemon} has applied a specific {@linkcode AbilityId}. - * @param expectedAbilityId - The expected {@linkcode AbilityId} + * @param expectedAbilityId - The `AbilityId` to check for */ toHaveAbilityApplied(expectedAbilityId: AbilityId): void; @@ -116,24 +140,36 @@ declare module "vitest" { */ toHaveHp(expectedHp: number): 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 `expectedDamageTaken` with {@linkcode toDmgValue}; default `true` + */ + toHaveTakenDamage(expectedDamageTaken: number, roundDown?: boolean): 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`. + * When checking whether an enemy wild Pokemon is fainted, one must store a reference to it in a variable _before_ the fainting effect occurs. + * Otherwise, the Pokemon will be removed from the field and garbage collected. */ toHaveFainted(): void; + /** + * Check whether a {@linkcode Pokemon} is at full HP. + */ + toHaveFullHp(): 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 moveId - The {@linkcode MoveId} corresponding to 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. + * If the Pokemon's moveset has been set via {@linkcode Overrides.MOVESET_OVERRIDE}/{@linkcode Overrides.ENEMY_MOVESET_OVERRIDE} + * or does not contain exactly one copy of `moveId`, this will fail the test. */ - toHaveUsedPP(expectedMove: MoveId, ppUsed: number | "all"): void; + toHaveUsedPP(moveId: MoveId, ppUsed: number | "all"): void; + + // #endregion Pokemon Matchers } } diff --git a/test/abilities/arena-trap.test.ts b/test/abilities/arena-trap.test.ts index f85fae5b259..0090487f49c 100644 --- a/test/abilities/arena-trap.test.ts +++ b/test/abilities/arena-trap.test.ts @@ -1,10 +1,15 @@ +import { getPokemonNameWithAffix } from "#app/messages"; import { allAbilities } from "#data/data-lists"; import { AbilityId } from "#enums/ability-id"; +import { Button } from "#enums/buttons"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; +import { UiMode } from "#enums/ui-mode"; import { GameManager } from "#test/test-utils/game-manager"; +import type { PartyUiHandler } from "#ui/party-ui-handler"; +import i18next from "i18next"; import Phaser from "phaser"; -import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; describe("Abilities - Arena Trap", () => { let phaserGame: Phaser.Game; @@ -23,68 +28,64 @@ describe("Abilities - Arena Trap", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset(MoveId.SPLASH) .ability(AbilityId.ARENA_TRAP) + .enemyAbility(AbilityId.ARENA_TRAP) .enemySpecies(SpeciesId.RALTS) - .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(MoveId.TELEPORT); + .enemyMoveset(MoveId.SPLASH); }); - // TODO: Enable test when Issue #935 is addressed - it.todo("should not allow grounded Pokémon to flee", async () => { + // NB: Since switching moves bypass trapping, the only way fleeing can occur in PKR is from the player + // TODO: Implement once forced flee helper exists + it.todo("should interrupt player flee attempt and display message, unless user has Run Away"); + + // TODO: Figure out how to wrangle the UI into not timing out + it.todo("should interrupt player switch attempt and display message", async () => { game.override.battleStyle("single"); + await game.classicMode.startBattle([SpeciesId.DUGTRIO, SpeciesId.GOTHITELLE]); - await game.classicMode.startBattle(); + const enemy = game.field.getEnemyPokemon(); - const enemy = game.scene.getEnemyPokemon(); + game.doSwitchPokemon(1); + game.onNextPrompt("CommandPhase", UiMode.PARTY, () => { + // no switch out command should be queued due to arena trap + expect(game.scene.currentBattle.turnCommands[0]).toBeNull(); - game.move.select(MoveId.SPLASH); + // back out and end the phase to avoid timeout + console.log(game.scene.ui.getHandler().constructor.name); + (game.scene.ui.getHandler() as PartyUiHandler).processInput(Button.CANCEL); + }); - await game.toNextTurn(); + await game.phaseInterceptor.to("CommandPhase"); - expect(enemy).toBe(game.scene.getEnemyPokemon()); + expect(game.textInterceptor.logs).toContain( + i18next.t("abilityTriggers:arenaTrap", { + pokemonNameWithAffix: getPokemonNameWithAffix(enemy), + abilityName: allAbilities[AbilityId.ARENA_TRAP].name, + }), + ); }); it("should guarantee double battle with any one LURE", async () => { game.override.startingModifier([{ name: "LURE" }]).startingWave(2); + await game.classicMode.startBattle([SpeciesId.DUGTRIO]); - await game.classicMode.startBattle(); - - expect(game.scene.getEnemyField().length).toBe(2); + expect(game.scene.getEnemyField()).toHaveLength(2); }); - /** - * This checks if the Player Pokemon is able to switch out/run away after the Enemy Pokemon with {@linkcode AbilityId.ARENA_TRAP} - * is forcefully moved out of the field from moves such as Roar {@linkcode MoveId.ROAR} - * - * Note: It should be able to switch out/run away - */ it("should lift if pokemon with this ability leaves the field", async () => { - game.override - .battleStyle("double") - .enemyMoveset(MoveId.SPLASH) - .moveset([MoveId.ROAR, MoveId.SPLASH]) - .ability(AbilityId.BALL_FETCH); - await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.SUDOWOODO, SpeciesId.LUNATONE]); + game.override.battleStyle("single"); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const [enemy1, enemy2] = game.scene.getEnemyField(); - const [player1, player2] = game.scene.getPlayerField(); + const player = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); - vi.spyOn(enemy1, "getAbility").mockReturnValue(allAbilities[AbilityId.ARENA_TRAP]); + expect(player.isTrapped()).toBe(true); + expect(enemy.isOnField()).toBe(true); - game.move.select(MoveId.ROAR); - game.move.select(MoveId.SPLASH, 1); + game.move.use(MoveId.ROAR); + await game.toEndOfTurn(); - // This runs the fist command phase where the moves are selected - await game.toNextTurn(); - // During the next command phase the player pokemons should not be trapped anymore - game.move.select(MoveId.SPLASH); - game.move.select(MoveId.SPLASH, 1); - await game.toNextTurn(); - - expect(player1.isTrapped()).toBe(false); - expect(player2.isTrapped()).toBe(false); - expect(enemy1.isOnField()).toBe(false); - expect(enemy2.isOnField()).toBe(true); + expect(player.isTrapped()).toBe(false); + expect(enemy.isOnField()).toBe(false); }); }); diff --git a/test/challenges/hardcore.test.ts b/test/challenges/hardcore.test.ts new file mode 100644 index 00000000000..0f4ab1b9f02 --- /dev/null +++ b/test/challenges/hardcore.test.ts @@ -0,0 +1,169 @@ +import { Status } from "#data/status-effect"; +import { AbilityId } from "#enums/ability-id"; +import { Button } from "#enums/buttons"; +import { Challenges } from "#enums/challenges"; +import { MoveId } from "#enums/move-id"; +import { ShopCursorTarget } from "#enums/shop-cursor-target"; +import { SpeciesId } from "#enums/species-id"; +import { StatusEffect } from "#enums/status-effect"; +import { UiMode } from "#enums/ui-mode"; +import { GameManager } from "#test/test-utils/game-manager"; +import { ModifierSelectUiHandler } from "#ui/modifier-select-ui-handler"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Challenges - Hardcore", () => { + 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.challengeMode.addChallenge(Challenges.HARDCORE, 1, 1); + game.override + .battleStyle("single") + .enemySpecies(SpeciesId.VOLTORB) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH) + .moveset(MoveId.SPLASH); + }); + + it("should render Revival Blessing unusable by players only", async () => { + game.override.enemyMoveset(MoveId.REVIVAL_BLESSING).moveset(MoveId.REVIVAL_BLESSING); + await game.challengeMode.startBattle([SpeciesId.NUZLEAF]); + + const player = game.field.getPlayerPokemon(); + const revBlessing = player.getMoveset()[0]; + expect(revBlessing.isUsable(player)).toBe(false); + + game.move.select(MoveId.REVIVAL_BLESSING); + await game.toEndOfTurn(); + + // Player struggled due to only move being the unusable Revival Blessing + expect(player).toHaveUsedMove(MoveId.STRUGGLE); + expect(game.field.getEnemyPokemon()).toHaveUsedMove(MoveId.REVIVAL_BLESSING); + }); + + it("prevents REVIVE items in shop and in wave rewards", async () => { + game.override.startingWave(181).startingLevel(200); + await game.challengeMode.startBattle(); + + game.move.select(MoveId.SPLASH); + await game.doKillOpponents(); + + await game.phaseInterceptor.to("SelectModifierPhase"); + expect(game.scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); + const modifierSelectHandler = game.scene.ui.handlers.find( + h => h instanceof ModifierSelectUiHandler, + ) as ModifierSelectUiHandler; + expect( + modifierSelectHandler.options.find(reward => reward.modifierTypeOption.type.group === "revive"), + ).toBeUndefined(); + expect( + modifierSelectHandler.shopOptionsRows.find(row => + row.find(item => item.modifierTypeOption.type.group === "revive"), + ), + ).toBeUndefined(); + }); + + it("prevents the automatic party heal from reviving fainted Pokémon", async () => { + game.override.startingWave(10).startingLevel(200); + await game.challengeMode.startBattle([SpeciesId.NUZLEAF, SpeciesId.WHISMUR]); + + const faintedPokemon = game.scene.getPlayerParty()[1]; + faintedPokemon.hp = 0; + faintedPokemon.status = new Status(StatusEffect.FAINT); + expect(faintedPokemon.isFainted()).toBe(true); + + game.move.select(MoveId.SPLASH); + await game.doKillOpponents(); + + await game.toNextWave(); + + expect(faintedPokemon.isFainted()).toBe(true); + }); + + // TODO: Couldn't figure out how to select party Pokémon + it.skip("prevents fusion with a fainted Pokémon", async () => { + game.override.itemRewards([{ name: "DNA_SPLICERS" }]); + await game.challengeMode.startBattle([SpeciesId.NUZLEAF, SpeciesId.WHISMUR]); + + const faintedPokemon = game.scene.getPlayerParty()[1]; + faintedPokemon.hp = 0; + faintedPokemon.status = new Status(StatusEffect.FAINT); + expect(faintedPokemon.isFainted()).toBe(true); + + game.move.select(MoveId.RAZOR_LEAF); + await game.doKillOpponents(); + + await game.phaseInterceptor.to("SelectModifierPhase"); + game.onNextPrompt( + "SelectModifierPhase", + UiMode.MODIFIER_SELECT, + () => { + const handler = game.scene.ui.getHandler() as ModifierSelectUiHandler; + // Traverse to and select first modifier + handler.setCursor(0); + handler.setRowCursor(ShopCursorTarget.REWARDS); + handler.processInput(Button.ACTION); + + // Go to fainted Pokémon and try to select it + handler.processInput(Button.RIGHT); + handler.processInput(Button.ACTION); + handler.processInput(Button.ACTION); + handler.processInput(Button.ACTION); + + expect(game.scene.getPlayerParty().length).toBe(2); + }, + () => game.isCurrentPhase("CommandPhase") || game.isCurrentPhase("NewBattlePhase"), + true, + ); + }); + + // TODO: Couldn't figure out how to select party Pokémon + it.skip("prevents fainted Pokémon from being revived", async () => { + game.override.itemRewards([{ name: "MAX_REVIVE" }]); + await game.challengeMode.startBattle([SpeciesId.NUZLEAF, SpeciesId.WHISMUR]); + + const faintedPokemon = game.scene.getPlayerParty()[1]; + faintedPokemon.hp = 0; + faintedPokemon.status = new Status(StatusEffect.FAINT); + expect(faintedPokemon.isFainted()).toBe(true); + + game.move.select(MoveId.RAZOR_LEAF); + await game.doKillOpponents(); + + await game.phaseInterceptor.to("SelectModifierPhase"); + game.onNextPrompt( + "SelectModifierPhase", + UiMode.MODIFIER_SELECT, + () => { + const handler = game.scene.ui.getHandler() as ModifierSelectUiHandler; + // Traverse to and select first modifier + handler.setCursor(0); + handler.setRowCursor(ShopCursorTarget.REWARDS); + handler.processInput(Button.ACTION); + + // Go to fainted Pokémon and try to select it + handler.processInput(Button.RIGHT); + handler.processInput(Button.ACTION); + handler.processInput(Button.ACTION); + handler.processInput(Button.ACTION); + + expect(faintedPokemon.isFainted()).toBe(true); + }, + () => game.isCurrentPhase("CommandPhase") || game.isCurrentPhase("NewBattlePhase"), + true, + ); + }); +}); diff --git a/test/challenges/limited-catch.test.ts b/test/challenges/limited-catch.test.ts new file mode 100644 index 00000000000..b51732305d0 --- /dev/null +++ b/test/challenges/limited-catch.test.ts @@ -0,0 +1,71 @@ +import { AbilityId } from "#enums/ability-id"; +import { Challenges } from "#enums/challenges"; +import { MoveId } from "#enums/move-id"; +import { MysteryEncounterType } from "#enums/mystery-encounter-type"; +import { PokeballType } from "#enums/pokeball"; +import { SpeciesId } from "#enums/species-id"; +import { runMysteryEncounterToEnd } from "#test/mystery-encounter/encounter-test-utils"; +import { GameManager } from "#test/test-utils/game-manager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Challenges - Limited Catch", () => { + 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.challengeMode.addChallenge(Challenges.LIMITED_CATCH, 1, 1); + game.override + .battleStyle("single") + .enemySpecies(SpeciesId.VOLTORB) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH) + .startingModifier([{ name: "MASTER_BALL", count: 1 }]); + }); + + it("should allow wild Pokémon to be caught on X1 waves", async () => { + game.override.startingWave(31); + await game.challengeMode.startBattle([SpeciesId.NUZLEAF]); + + game.doThrowPokeball(PokeballType.MASTER_BALL); + await game.toEndOfTurn(); + + expect(game.scene.getPlayerParty()).toHaveLength(2); + }); + + it("should prevent Pokémon from being caught on non-X1 waves", async () => { + game.override.startingWave(53); + await game.challengeMode.startBattle([SpeciesId.NUZLEAF]); + + game.doThrowPokeball(PokeballType.MASTER_BALL); + await game.toEndOfTurn(); + + expect(game.scene.getPlayerParty()).toHaveLength(1); + }); + + it("should allow gift Pokémon from Mystery Encounters to be added to party", async () => { + game.override + .mysteryEncounterChance(100) + .mysteryEncounter(MysteryEncounterType.THE_POKEMON_SALESMAN) + .startingWave(12); + game.scene.money = 20000; + + await game.challengeMode.runToSummon([SpeciesId.NUZLEAF]); + + await runMysteryEncounterToEnd(game, 1); + + expect(game.scene.getPlayerParty()).toHaveLength(2); + }); +}); diff --git a/test/challenges/limited-support.test.ts b/test/challenges/limited-support.test.ts new file mode 100644 index 00000000000..35413220550 --- /dev/null +++ b/test/challenges/limited-support.test.ts @@ -0,0 +1,92 @@ +import { AbilityId } from "#enums/ability-id"; +import { Challenges } from "#enums/challenges"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; +import { UiMode } from "#enums/ui-mode"; +import { ExpBoosterModifier } from "#modifiers/modifier"; +import { GameManager } from "#test/test-utils/game-manager"; +import { ModifierSelectUiHandler } from "#ui/modifier-select-ui-handler"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Challenges - Limited Support", () => { + 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") + .enemySpecies(SpeciesId.VOLTORB) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); + }); + + it('should disable the shop in "No Shop"', async () => { + game.override.startingWave(181); + game.challengeMode.addChallenge(Challenges.LIMITED_SUPPORT, 2, 1); + await game.challengeMode.startBattle([SpeciesId.NUZLEAF]); + + game.move.use(MoveId.SPLASH); + await game.doKillOpponents(); + await game.phaseInterceptor.to("SelectModifierPhase"); + + expect(game.scene.ui.getMode()).toBe(UiMode.MODIFIER_SELECT); + const modifierSelectHandler = game.scene.ui.handlers.find( + h => h instanceof ModifierSelectUiHandler, + ) as ModifierSelectUiHandler; + expect(modifierSelectHandler.shopOptionsRows).toHaveLength(0); + }); + + it('should disable the automatic party heal in "No Heal"', async () => { + game.override.startingWave(10); + game.challengeMode.addChallenge(Challenges.LIMITED_SUPPORT, 1, 1); + await game.challengeMode.startBattle([SpeciesId.NUZLEAF]); + + const playerPokemon = game.field.getPlayerPokemon(); + playerPokemon.hp /= 2; + + game.move.use(MoveId.SPLASH); + await game.doKillOpponents(); + await game.toNextWave(); + + expect(playerPokemon).not.toHaveFullHp(); + }); + + it('should disable both automatic party healing and shop in "Both"', async () => { + game.override.startingWave(10); + game.challengeMode.addChallenge(Challenges.LIMITED_SUPPORT, 3, 1); + await game.challengeMode.startBattle([SpeciesId.NUZLEAF]); + + const playerPokemon = game.field.getPlayerPokemon(); + playerPokemon.hp /= 2; + + game.move.use(MoveId.SPLASH); + await game.doKillOpponents(); + await game.toNextWave(); + + expect(game.scene.getModifiers(ExpBoosterModifier)).toHaveLength(1); + expect(playerPokemon).not.toHaveFullHp(); + + game.move.use(MoveId.SPLASH); + await game.doKillOpponents(); + await game.phaseInterceptor.to("SelectModifierPhase"); + + expect(game.scene.ui.getMode()).toBe(UiMode.MODIFIER_SELECT); + const modifierSelectHandler = game.scene.ui.handlers.find( + h => h instanceof ModifierSelectUiHandler, + ) as ModifierSelectUiHandler; + expect(modifierSelectHandler.shopOptionsRows).toHaveLength(0); + }); +}); diff --git a/test/matchers.setup.ts b/test/matchers.setup.ts index 03b29302916..f76a9423ab3 100644 --- a/test/matchers.setup.ts +++ b/test/matchers.setup.ts @@ -1,10 +1,12 @@ import { toEqualArrayUnsorted } from "#test/test-utils/matchers/to-equal-array-unsorted"; import { toHaveAbilityApplied } from "#test/test-utils/matchers/to-have-ability-applied"; +import { toHaveArenaTag } from "#test/test-utils/matchers/to-have-arena-tag"; 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 { toHavePositionalTag } from "#test/test-utils/matchers/to-have-positional-tag"; 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"; @@ -22,18 +24,20 @@ import { expect } from "vitest"; expect.extend({ toEqualArrayUnsorted, + toHaveWeather, + toHaveTerrain, + toHaveArenaTag, + toHavePositionalTag, toHaveTypes, toHaveUsedMove, toHaveEffectiveStat, - toHaveTakenDamage, - toHaveWeather, - toHaveTerrain, - toHaveFullHp, toHaveStatusEffect, toHaveStatStage, toHaveBattlerTag, toHaveAbilityApplied, toHaveHp, + toHaveTakenDamage, + toHaveFullHp, toHaveFainted, toHaveUsedPP, }); 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/recoil-moves.test.ts b/test/moves/recoil-moves.test.ts new file mode 100644 index 00000000000..6fc69c932ac --- /dev/null +++ b/test/moves/recoil-moves.test.ts @@ -0,0 +1,84 @@ +import { AbilityId } from "#enums/ability-id"; +import { BattlerTagType } from "#enums/battler-tag-type"; +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"; + +describe("Moves - Recoil Moves", () => { + 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") + .enemySpecies(SpeciesId.PIDOVE) + .startingLevel(1) + .enemyLevel(100) + .enemyMoveset(MoveId.SUBSTITUTE) + .criticalHits(false) + .ability(AbilityId.NO_GUARD) + .enemyAbility(AbilityId.BALL_FETCH); + }); + + it.each([ + { moveName: "Double Edge", moveId: MoveId.DOUBLE_EDGE }, + { moveName: "Brave Bird", moveId: MoveId.BRAVE_BIRD }, + { moveName: "Flare Blitz", moveId: MoveId.FLARE_BLITZ }, + { moveName: "Head Charge", moveId: MoveId.HEAD_CHARGE }, + { moveName: "Head Smash", moveId: MoveId.HEAD_SMASH }, + { moveName: "Light of Ruin", moveId: MoveId.LIGHT_OF_RUIN }, + { moveName: "Struggle", moveId: MoveId.STRUGGLE }, + { moveName: "Submission", moveId: MoveId.SUBMISSION }, + { moveName: "Take Down", moveId: MoveId.TAKE_DOWN }, + { moveName: "Volt Tackle", moveId: MoveId.VOLT_TACKLE }, + { moveName: "Wave Crash", moveId: MoveId.WAVE_CRASH }, + { moveName: "Wild Charge", moveId: MoveId.WILD_CHARGE }, + { moveName: "Wood Hammer", moveId: MoveId.WOOD_HAMMER }, + ])("$moveName causes recoil damage when hitting a substitute", async ({ moveId }) => { + await game.classicMode.startBattle([SpeciesId.TOGEPI]); + + game.move.use(moveId); + await game.phaseInterceptor.to("MoveEndPhase"); // Pidove substitute + + const pidove = game.field.getEnemyPokemon(); + const subTag = pidove.getTag(BattlerTagType.SUBSTITUTE)!; + expect(subTag).toBeDefined(); + const subInitialHp = subTag.hp; + + await game.phaseInterceptor.to("MoveEndPhase"); // player attack + + expect(subTag.hp).toBeLessThan(subInitialHp); + + const playerPokemon = game.field.getPlayerPokemon(); + expect(playerPokemon.hp).toBeLessThan(playerPokemon.getMaxHp()); + }); + + it("causes recoil damage when hitting a substitute in a double battle", async () => { + game.override.battleStyle("double"); + + await game.classicMode.startBattle([SpeciesId.TOGEPI, SpeciesId.TOGEPI]); + + const [playerPokemon1, playerPokemon2] = game.scene.getPlayerField(); + + game.move.use(MoveId.DOUBLE_EDGE, 0); + game.move.use(MoveId.DOUBLE_EDGE, 1); + + await game.toNextTurn(); + + expect(playerPokemon1.hp).toBeLessThan(playerPokemon1.getMaxHp()); + expect(playerPokemon2.hp).toBeLessThan(playerPokemon2.getMaxHp()); + }); +}); diff --git a/test/moves/whirlwind.test.ts b/test/moves/whirlwind.test.ts index bbb2afe621a..61c05a30322 100644 --- a/test/moves/whirlwind.test.ts +++ b/test/moves/whirlwind.test.ts @@ -1,4 +1,3 @@ -import { globalScene } from "#app/global-scene"; import { Status } from "#data/status-effect"; import { AbilityId } from "#enums/ability-id"; import { BattleType } from "#enums/battle-type"; @@ -179,18 +178,13 @@ describe("Moves - Whirlwind", () => { const eligibleEnemy = enemyParty.filter(p => p.hp > 0 && p.isAllowedInBattle()); expect(eligibleEnemy.length).toBe(1); - // Spy on the queueMessage function - const queueSpy = vi.spyOn(globalScene.phaseManager, "queueMessage"); - // Player uses Whirlwind; opponent uses Splash game.move.select(MoveId.WHIRLWIND); await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); - // Verify that the failure message is displayed for Whirlwind - expect(queueSpy).toHaveBeenCalledWith(expect.stringContaining("But it failed")); - // Verify the opponent's Splash message - expect(queueSpy).toHaveBeenCalledWith(expect.stringContaining("But nothing happened!")); + const player = game.field.getPlayerPokemon(); + expect(player).toHaveUsedMove({ move: MoveId.WHIRLWIND, result: MoveResult.FAIL }); }); it("should not pull in the other trainer's pokemon in a partner trainer battle", async () => { diff --git a/test/moves/wish.test.ts b/test/moves/wish.test.ts index 147c598106b..55877edbfd4 100644 --- a/test/moves/wish.test.ts +++ b/test/moves/wish.test.ts @@ -39,15 +39,6 @@ describe("Move - Wish", () => { .enemyLevel(100); }); - /** - * Expect that wish is active with the specified number of attacks. - * @param numAttacks - The number of wish instances that should be queued; default `1` - */ - function expectWishActive(numAttacks = 1) { - const wishes = game.scene.arena.positionalTagManager["tags"].filter(t => t.tagType === PositionalTagType.WISH); - expect(wishes).toHaveLength(numAttacks); - } - it("should heal the Pokemon in the current slot for 50% of the user's maximum HP", async () => { await game.classicMode.startBattle([SpeciesId.ALOMOMOLA, SpeciesId.BLISSEY]); @@ -58,19 +49,19 @@ describe("Move - Wish", () => { game.move.use(MoveId.WISH); await game.toNextTurn(); - expectWishActive(); + expect(game).toHavePositionalTag(PositionalTagType.WISH); game.doSwitchPokemon(1); await game.toEndOfTurn(); - expectWishActive(0); + expect(game).toHavePositionalTag(PositionalTagType.WISH, 0); expect(game.textInterceptor.logs).toContain( i18next.t("arenaTag:wishTagOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(alomomola), }), ); - expect(alomomola.hp).toBe(1); - expect(blissey.hp).toBe(toDmgValue(alomomola.getMaxHp() / 2) + 1); + expect(alomomola).toHaveHp(1); + expect(blissey).toHaveHp(toDmgValue(alomomola.getMaxHp() / 2) + 1); }); it("should work if the user has full HP, but not if it already has an active Wish", async () => { @@ -82,13 +73,13 @@ describe("Move - Wish", () => { game.move.use(MoveId.WISH); await game.toNextTurn(); - expectWishActive(); + expect(game).toHavePositionalTag(PositionalTagType.WISH); game.move.use(MoveId.WISH); await game.toEndOfTurn(); expect(alomomola.hp).toBe(toDmgValue(alomomola.getMaxHp() / 2) + 1); - expect(alomomola.getLastXMoves()[0].result).toBe(MoveResult.FAIL); + expect(alomomola).toHaveUsedMove({ result: MoveResult.FAIL }); }); it("should function independently of Future Sight", async () => { @@ -103,7 +94,8 @@ describe("Move - Wish", () => { await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); - expectWishActive(1); + expect(game).toHavePositionalTag(PositionalTagType.WISH); + expect(game).toHavePositionalTag(PositionalTagType.DELAYED_ATTACK); }); it("should work in double battles and trigger in order of creation", async () => { @@ -127,7 +119,7 @@ describe("Move - Wish", () => { await game.setTurnOrder(oldOrder.map(p => p.getBattlerIndex())); await game.toNextTurn(); - expectWishActive(4); + expect(game).toHavePositionalTag(PositionalTagType.WISH, 4); // Lower speed to change turn order alomomola.setStatStage(Stat.SPD, 6); @@ -141,7 +133,7 @@ describe("Move - Wish", () => { await game.phaseInterceptor.to("PositionalTagPhase"); // all wishes have activated and added healing phases - expectWishActive(0); + expect(game).toHavePositionalTag(PositionalTagType.WISH, 0); const healPhases = game.scene.phaseManager.phaseQueue.filter(p => p.is("PokemonHealPhase")); expect(healPhases).toHaveLength(4); @@ -165,14 +157,14 @@ describe("Move - Wish", () => { game.move.use(MoveId.WISH, BattlerIndex.PLAYER_2); await game.toNextTurn(); - expectWishActive(); + expect(game).toHavePositionalTag(PositionalTagType.WISH); game.move.use(MoveId.SPLASH, BattlerIndex.PLAYER); game.move.use(MoveId.MEMENTO, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY_2); await game.toEndOfTurn(); // Wish went away without doing anything - expectWishActive(0); + expect(game).toHavePositionalTag(PositionalTagType.WISH, 0); expect(game.textInterceptor.logs).not.toContain( i18next.t("arenaTag:wishTagOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(blissey), diff --git a/test/mystery-encounter/encounters/weird-dream-encounter.test.ts b/test/mystery-encounter/encounters/weird-dream-encounter.test.ts index e9fcc9797d1..9b430ec046e 100644 --- a/test/mystery-encounter/encounters/weird-dream-encounter.test.ts +++ b/test/mystery-encounter/encounters/weird-dream-encounter.test.ts @@ -112,7 +112,7 @@ describe("Weird Dream - Mystery Encounter", () => { it("should transform the new party into new species, 2 at +90/+110, the rest at +40/50 BST", async () => { await game.runToMysteryEncounter(MysteryEncounterType.WEIRD_DREAM, defaultParty); - const pokemonPrior = scene.getPlayerParty().map(pokemon => pokemon); + const pokemonPrior = scene.getPlayerParty().slice(); const bstsPrior = pokemonPrior.map(species => species.getSpeciesForm().getBaseStatTotal()); await runMysteryEncounterToEnd(game, 1); @@ -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/system/rename-run.test.ts b/test/system/rename-run.test.ts new file mode 100644 index 00000000000..5031d84245f --- /dev/null +++ b/test/system/rename-run.test.ts @@ -0,0 +1,82 @@ +import * as account from "#app/account"; +import * as bypassLoginModule from "#app/global-vars/bypass-login"; +import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; +import type { SessionSaveData } from "#app/system/game-data"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { GameManager } from "#test/test-utils/game-manager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; + +describe("System - Rename Run", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([MoveId.SPLASH]) + .battleStyle("single") + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + describe("renameSession", () => { + beforeEach(() => { + vi.spyOn(bypassLoginModule, "bypassLogin", "get").mockReturnValue(false); + vi.spyOn(account, "updateUserInfo").mockImplementation(async () => [true, 1]); + }); + + it("should return false if slotId < 0", async () => { + const result = await game.scene.gameData.renameSession(-1, "Named Run"); + + expect(result).toEqual(false); + }); + + it("should return false if getSession returns null", async () => { + vi.spyOn(game.scene.gameData, "getSession").mockResolvedValue(null as unknown as SessionSaveData); + + const result = await game.scene.gameData.renameSession(-1, "Named Run"); + + expect(result).toEqual(false); + }); + + it("should return true if bypassLogin is true", async () => { + vi.spyOn(bypassLoginModule, "bypassLogin", "get").mockReturnValue(true); + vi.spyOn(game.scene.gameData, "getSession").mockResolvedValue({} as SessionSaveData); + + const result = await game.scene.gameData.renameSession(0, "Named Run"); + + expect(result).toEqual(true); + }); + + it("should return false if api returns error", async () => { + vi.spyOn(game.scene.gameData, "getSession").mockResolvedValue({} as SessionSaveData); + vi.spyOn(pokerogueApi.savedata.session, "update").mockResolvedValue("Unknown Error!"); + + const result = await game.scene.gameData.renameSession(0, "Named Run"); + + expect(result).toEqual(false); + }); + + it("should return true if api is succesfull", async () => { + vi.spyOn(game.scene.gameData, "getSession").mockResolvedValue({} as SessionSaveData); + vi.spyOn(pokerogueApi.savedata.session, "update").mockResolvedValue(""); + + const result = await game.scene.gameData.renameSession(0, "Named Run"); + + expect(result).toEqual(true); + expect(account.updateUserInfo).toHaveBeenCalled(); + }); + }); +}); diff --git a/test/test-utils/game-manager.ts b/test/test-utils/game-manager.ts index f952557bb69..05b3be21d26 100644 --- a/test/test-utils/game-manager.ts +++ b/test/test-utils/game-manager.ts @@ -224,7 +224,7 @@ export class GameManager { // This will consider all battle entry dialog as seens and skip them vi.spyOn(this.scene.ui, "shouldSkipDialogue").mockReturnValue(true); - if (overrides.OPP_HELD_ITEMS_OVERRIDE.length === 0) { + if (overrides.ENEMY_HELD_ITEMS_OVERRIDE.length === 0) { this.removeEnemyHeldItems(); } diff --git a/test/test-utils/helpers/challenge-mode-helper.ts b/test/test-utils/helpers/challenge-mode-helper.ts index 3952685a560..a8a9ff89de6 100644 --- a/test/test-utils/helpers/challenge-mode-helper.ts +++ b/test/test-utils/helpers/challenge-mode-helper.ts @@ -50,7 +50,7 @@ export class ChallengeModeHelper extends GameManagerHelper { }); await this.game.phaseInterceptor.run(EncounterPhase); - if (overrides.OPP_HELD_ITEMS_OVERRIDE.length === 0 && this.game.override.removeEnemyStartingItems) { + if (overrides.ENEMY_HELD_ITEMS_OVERRIDE.length === 0 && this.game.override.removeEnemyStartingItems) { this.game.removeEnemyHeldItems(); } } diff --git a/test/test-utils/helpers/classic-mode-helper.ts b/test/test-utils/helpers/classic-mode-helper.ts index 5d73dc07615..008648fcd0d 100644 --- a/test/test-utils/helpers/classic-mode-helper.ts +++ b/test/test-utils/helpers/classic-mode-helper.ts @@ -53,7 +53,7 @@ export class ClassicModeHelper extends GameManagerHelper { }); await this.game.phaseInterceptor.to(EncounterPhase); - if (overrides.OPP_HELD_ITEMS_OVERRIDE.length === 0 && this.game.override.removeEnemyStartingItems) { + if (overrides.ENEMY_HELD_ITEMS_OVERRIDE.length === 0 && this.game.override.removeEnemyStartingItems) { this.game.removeEnemyHeldItems(); } } diff --git a/test/test-utils/helpers/daily-mode-helper.ts b/test/test-utils/helpers/daily-mode-helper.ts index 7aa1e699118..ca882eaf548 100644 --- a/test/test-utils/helpers/daily-mode-helper.ts +++ b/test/test-utils/helpers/daily-mode-helper.ts @@ -37,7 +37,7 @@ export class DailyModeHelper extends GameManagerHelper { await this.game.phaseInterceptor.to(EncounterPhase); - if (overrides.OPP_HELD_ITEMS_OVERRIDE.length === 0 && this.game.override.removeEnemyStartingItems) { + if (overrides.ENEMY_HELD_ITEMS_OVERRIDE.length === 0 && this.game.override.removeEnemyStartingItems) { this.game.removeEnemyHeldItems(); } } diff --git a/test/test-utils/helpers/move-helper.ts b/test/test-utils/helpers/move-helper.ts index 6a01e4110da..3d5e9ae6af9 100644 --- a/test/test-utils/helpers/move-helper.ts +++ b/test/test-utils/helpers/move-helper.ts @@ -228,8 +228,8 @@ export class MoveHelper extends GameManagerHelper { console.warn("Player moveset override disabled due to use of `game.move.changeMoveset`!"); } } else { - if (coerceArray(Overrides.OPP_MOVESET_OVERRIDE).length > 0) { - vi.spyOn(Overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue([]); + if (coerceArray(Overrides.ENEMY_MOVESET_OVERRIDE).length > 0) { + vi.spyOn(Overrides, "ENEMY_MOVESET_OVERRIDE", "get").mockReturnValue([]); console.warn("Enemy moveset override disabled due to use of `game.move.changeMoveset`!"); } } @@ -302,8 +302,8 @@ export class MoveHelper extends GameManagerHelper { (this.game.scene.phaseManager.getCurrentPhase() as EnemyCommandPhase).getFieldIndex() ]; - if ([Overrides.OPP_MOVESET_OVERRIDE].flat().length > 0) { - vi.spyOn(Overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue([]); + if ([Overrides.ENEMY_MOVESET_OVERRIDE].flat().length > 0) { + vi.spyOn(Overrides, "ENEMY_MOVESET_OVERRIDE", "get").mockReturnValue([]); console.warn( "Warning: `forceEnemyMove` overwrites the Pokemon's moveset and disables the enemy moveset override!", ); diff --git a/test/test-utils/helpers/overrides-helper.ts b/test/test-utils/helpers/overrides-helper.ts index d67ceedf891..93b89688935 100644 --- a/test/test-utils/helpers/overrides-helper.ts +++ b/test/test-utils/helpers/overrides-helper.ts @@ -406,7 +406,7 @@ export class OverridesHelper extends GameManagerHelper { * @returns `this` */ public enemySpecies(species: SpeciesId | number): this { - vi.spyOn(Overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(species); + vi.spyOn(Overrides, "ENEMY_SPECIES_OVERRIDE", "get").mockReturnValue(species); this.log(`Enemy Pokemon species set to ${SpeciesId[species]} (=${species})!`); return this; } @@ -416,7 +416,7 @@ export class OverridesHelper extends GameManagerHelper { * @returns `this` */ public enableEnemyFusion(): this { - vi.spyOn(Overrides, "OPP_FUSION_OVERRIDE", "get").mockReturnValue(true); + vi.spyOn(Overrides, "ENEMY_FUSION_OVERRIDE", "get").mockReturnValue(true); this.log("Enemy Pokemon is a random fusion!"); return this; } @@ -427,7 +427,7 @@ export class OverridesHelper extends GameManagerHelper { * @returns `this` */ public enemyFusionSpecies(species: SpeciesId | number): this { - vi.spyOn(Overrides, "OPP_FUSION_SPECIES_OVERRIDE", "get").mockReturnValue(species); + vi.spyOn(Overrides, "ENEMY_FUSION_SPECIES_OVERRIDE", "get").mockReturnValue(species); this.log(`Enemy Pokemon fusion species set to ${SpeciesId[species]} (=${species})!`); return this; } @@ -438,7 +438,7 @@ export class OverridesHelper extends GameManagerHelper { * @returns `this` */ public enemyAbility(ability: AbilityId): this { - vi.spyOn(Overrides, "OPP_ABILITY_OVERRIDE", "get").mockReturnValue(ability); + vi.spyOn(Overrides, "ENEMY_ABILITY_OVERRIDE", "get").mockReturnValue(ability); this.log(`Enemy Pokemon ability set to ${AbilityId[ability]} (=${ability})!`); return this; } @@ -449,7 +449,7 @@ export class OverridesHelper extends GameManagerHelper { * @returns `this` */ public enemyPassiveAbility(passiveAbility: AbilityId): this { - vi.spyOn(Overrides, "OPP_PASSIVE_ABILITY_OVERRIDE", "get").mockReturnValue(passiveAbility); + vi.spyOn(Overrides, "ENEMY_PASSIVE_ABILITY_OVERRIDE", "get").mockReturnValue(passiveAbility); this.log(`Enemy Pokemon PASSIVE ability set to ${AbilityId[passiveAbility]} (=${passiveAbility})!`); return this; } @@ -460,7 +460,7 @@ export class OverridesHelper extends GameManagerHelper { * @returns `this` */ public enemyHasPassiveAbility(hasPassiveAbility: boolean | null): this { - vi.spyOn(Overrides, "OPP_HAS_PASSIVE_ABILITY_OVERRIDE", "get").mockReturnValue(hasPassiveAbility); + vi.spyOn(Overrides, "ENEMY_HAS_PASSIVE_ABILITY_OVERRIDE", "get").mockReturnValue(hasPassiveAbility); if (hasPassiveAbility === null) { this.log("Enemy Pokemon PASSIVE ability no longer force enabled or disabled!"); } else { @@ -475,7 +475,7 @@ export class OverridesHelper extends GameManagerHelper { * @returns `this` */ public enemyMoveset(moveset: MoveId | MoveId[]): this { - vi.spyOn(Overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue(moveset); + vi.spyOn(Overrides, "ENEMY_MOVESET_OVERRIDE", "get").mockReturnValue(moveset); moveset = coerceArray(moveset); const movesetStr = moveset.map(moveId => MoveId[moveId]).join(", "); this.log(`Enemy Pokemon moveset set to ${movesetStr} (=[${moveset.join(", ")}])!`); @@ -488,7 +488,7 @@ export class OverridesHelper extends GameManagerHelper { * @returns `this` */ public enemyLevel(level: number): this { - vi.spyOn(Overrides, "OPP_LEVEL_OVERRIDE", "get").mockReturnValue(level); + vi.spyOn(Overrides, "ENEMY_LEVEL_OVERRIDE", "get").mockReturnValue(level); this.log(`Enemy Pokemon level set to ${level}!`); return this; } @@ -499,7 +499,7 @@ export class OverridesHelper extends GameManagerHelper { * @returns `this` */ public enemyStatusEffect(statusEffect: StatusEffect): this { - vi.spyOn(Overrides, "OPP_STATUS_OVERRIDE", "get").mockReturnValue(statusEffect); + vi.spyOn(Overrides, "ENEMY_STATUS_OVERRIDE", "get").mockReturnValue(statusEffect); this.log(`Enemy Pokemon status-effect set to ${StatusEffect[statusEffect]} (=${statusEffect})!`); return this; } @@ -510,7 +510,7 @@ export class OverridesHelper extends GameManagerHelper { * @returns `this` */ public enemyHeldItems(items: ModifierOverride[]): this { - vi.spyOn(Overrides, "OPP_HELD_ITEMS_OVERRIDE", "get").mockReturnValue(items); + vi.spyOn(Overrides, "ENEMY_HELD_ITEMS_OVERRIDE", "get").mockReturnValue(items); this.log("Enemy Pokemon held items set to:", items); return this; } @@ -571,7 +571,7 @@ export class OverridesHelper extends GameManagerHelper { * @param variant - (Optional) The enemy's shiny {@linkcode Variant}. */ enemyShiny(shininess: boolean | null, variant?: Variant): this { - vi.spyOn(Overrides, "OPP_SHINY_OVERRIDE", "get").mockReturnValue(shininess); + vi.spyOn(Overrides, "ENEMY_SHINY_OVERRIDE", "get").mockReturnValue(shininess); if (shininess === null) { this.log("Disabled enemy Pokemon shiny override!"); } else { @@ -579,7 +579,7 @@ export class OverridesHelper extends GameManagerHelper { } if (variant !== undefined) { - vi.spyOn(Overrides, "OPP_VARIANT_OVERRIDE", "get").mockReturnValue(variant); + vi.spyOn(Overrides, "ENEMY_VARIANT_OVERRIDE", "get").mockReturnValue(variant); this.log(`Set enemy shiny variant to be ${variant}!`); } return this; @@ -594,7 +594,7 @@ export class OverridesHelper extends GameManagerHelper { * @returns `this` */ public enemyHealthSegments(healthSegments: number): this { - vi.spyOn(Overrides, "OPP_HEALTH_SEGMENTS_OVERRIDE", "get").mockReturnValue(healthSegments); + vi.spyOn(Overrides, "ENEMY_HEALTH_SEGMENTS_OVERRIDE", "get").mockReturnValue(healthSegments); this.log("Enemy Pokemon health segments set to:", healthSegments); return this; } diff --git a/test/test-utils/matchers/to-equal-array-unsorted.ts b/test/test-utils/matchers/to-equal-array-unsorted.ts index 846ea9e7779..97398689032 100644 --- a/test/test-utils/matchers/to-equal-array-unsorted.ts +++ b/test/test-utils/matchers/to-equal-array-unsorted.ts @@ -1,4 +1,5 @@ import { getOnelineDiffStr } from "#test/test-utils/string-utils"; +import { receivedStr } from "#test/test-utils/test-utils"; import type { MatcherState, SyncExpectationResult } from "@vitest/expect"; /** @@ -14,22 +15,22 @@ export function toEqualArrayUnsorted( ): SyncExpectationResult { if (!Array.isArray(received)) { return { - pass: false, - message: () => `Expected an array, but got ${this.utils.stringify(received)}!`, + pass: this.isNot, + message: () => `Expected to receive an array, but got ${receivedStr(received)}!`, }; } if (received.length !== expected.length) { return { pass: false, - message: () => `Expected to receive array of length ${received.length}, but got ${expected.length} instead!`, - actual: received, + message: () => `Expected to receive an array of length ${received.length}, but got ${expected.length} instead!`, expected, + actual: received, }; } - const actualSorted = received.slice().sort(); - const expectedSorted = expected.slice().sort(); + const actualSorted = received.toSorted(); + const expectedSorted = expected.toSorted(); const pass = this.equals(actualSorted, expectedSorted, [...this.customTesters, this.utils.iterableEquality]); const actualStr = getOnelineDiffStr.call(this, actualSorted); diff --git a/test/test-utils/matchers/to-have-ability-applied.ts b/test/test-utils/matchers/to-have-ability-applied.ts index a3921e6371c..1ed74410de0 100644 --- a/test/test-utils/matchers/to-have-ability-applied.ts +++ b/test/test-utils/matchers/to-have-ability-applied.ts @@ -21,8 +21,8 @@ export function toHaveAbilityApplied( ): SyncExpectationResult { if (!isPokemonInstance(received)) { return { - pass: false, - message: () => `Expected to recieve a Pokemon, but got ${receivedStr(received)}!`, + pass: this.isNot, + message: () => `Expected to receive a Pokemon, but got ${receivedStr(received)}!`, }; } diff --git a/test/test-utils/matchers/to-have-arena-tag.ts b/test/test-utils/matchers/to-have-arena-tag.ts new file mode 100644 index 00000000000..dee7c133f25 --- /dev/null +++ b/test/test-utils/matchers/to-have-arena-tag.ts @@ -0,0 +1,77 @@ +import type { ArenaTag, ArenaTagTypeMap } from "#data/arena-tag"; +import type { ArenaTagSide } from "#enums/arena-tag-side"; +import type { ArenaTagType } from "#enums/arena-tag-type"; +import type { OneOther } from "#test/@types/test-helpers"; +// biome-ignore lint/correctness/noUnusedImports: TSDoc +import type { GameManager } from "#test/test-utils/game-manager"; +import { getOnelineDiffStr } from "#test/test-utils/string-utils"; +import { isGameManagerInstance, receivedStr } from "#test/test-utils/test-utils"; +import type { MatcherState, SyncExpectationResult } from "@vitest/expect"; + +// intersection required to preserve T for inferences +export type toHaveArenaTagOptions = OneOther & { + tagType: T; +}; + +/** + * Matcher to check if the {@linkcode Arena} has a given {@linkcode ArenaTag} active. + * @param received - The object to check. Should be the current {@linkcode GameManager}. + * @param expectedTag - The `ArenaTagType` of the desired tag, or a partially-filled object + * containing the desired properties + * @param side - The {@linkcode ArenaTagSide | side of the field} the tag should affect, or + * {@linkcode ArenaTagSide.BOTH} to check both sides + * @returns The result of the matching + */ +export function toHaveArenaTag( + this: MatcherState, + received: unknown, + expectedTag: T | toHaveArenaTagOptions, + side?: ArenaTagSide, +): SyncExpectationResult { + if (!isGameManagerInstance(received)) { + return { + pass: this.isNot, + message: () => `Expected to receive a GameManager, but got ${receivedStr(received)}!`, + }; + } + + if (!received.scene?.arena) { + return { + pass: this.isNot, + message: () => `Expected GameManager.${received.scene ? "scene.arena" : "scene"} to be defined!`, + }; + } + + // Coerce lone `tagType`s into objects + // Bangs are ok as we enforce safety via overloads + // @ts-expect-error - Typescript is being stupid as tag type and side will always exist + const etag: Partial & { tagType: T; side: ArenaTagSide } = + typeof expectedTag === "object" ? expectedTag : { tagType: expectedTag, side: side! }; + + // We need to get all tags for the case of checking properties of a tag present on both sides of the arena + const tags = received.scene.arena.findTagsOnSide(t => t.tagType === etag.tagType, etag.side); + if (tags.length === 0) { + return { + pass: false, + message: () => `Expected the Arena to have a tag of type ${etag.tagType}, but it didn't!`, + expected: etag.tagType, + actual: received.scene.arena.tags.map(t => t.tagType), + }; + } + + // Pass if any of the matching tags meet our criteria + const pass = tags.some(tag => + this.equals(tag, expectedTag, [...this.customTesters, this.utils.subsetEquality, this.utils.iterableEquality]), + ); + + const expectedStr = getOnelineDiffStr.call(this, expectedTag); + return { + pass, + message: () => + pass + ? `Expected the Arena to NOT have a tag matching ${expectedStr}, but it did!` + : `Expected the Arena to have a tag matching ${expectedStr}, but it didn't!`, + expected: expectedTag, + actual: tags, + }; +} diff --git a/test/test-utils/matchers/to-have-effective-stat.ts b/test/test-utils/matchers/to-have-effective-stat.ts index bc10a646c02..dda6bc7e91e 100644 --- a/test/test-utils/matchers/to-have-effective-stat.ts +++ b/test/test-utils/matchers/to-have-effective-stat.ts @@ -6,7 +6,7 @@ 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 { +export interface toHaveEffectiveStatOptions { /** * The target {@linkcode Pokemon} * @see {@linkcode Pokemon.getEffectiveStat} @@ -30,7 +30,7 @@ export interface ToHaveEffectiveStatMatcherOptions { * @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} + * @param options - The {@linkcode toHaveEffectiveStatOptions} * @returns Whether the matcher passed */ export function toHaveEffectiveStat( @@ -38,11 +38,11 @@ export function toHaveEffectiveStat( received: unknown, stat: EffectiveStat, expectedValue: number, - { enemy, move, isCritical = false }: ToHaveEffectiveStatMatcherOptions = {}, + { enemy, move, isCritical = false }: toHaveEffectiveStatOptions = {}, ): SyncExpectationResult { if (!isPokemonInstance(received)) { return { - pass: false, + pass: this.isNot, message: () => `Expected to receive a Pokémon, but got ${receivedStr(received)}!`, }; } diff --git a/test/test-utils/matchers/to-have-fainted.ts b/test/test-utils/matchers/to-have-fainted.ts index 73ca96a31b5..f3e84e7a425 100644 --- a/test/test-utils/matchers/to-have-fainted.ts +++ b/test/test-utils/matchers/to-have-fainted.ts @@ -12,7 +12,7 @@ import type { MatcherState, SyncExpectationResult } from "@vitest/expect"; export function toHaveFainted(this: MatcherState, received: unknown): SyncExpectationResult { if (!isPokemonInstance(received)) { return { - pass: false, + pass: this.isNot, message: () => `Expected to receive a Pokémon, but got ${receivedStr(received)}!`, }; } diff --git a/test/test-utils/matchers/to-have-full-hp.ts b/test/test-utils/matchers/to-have-full-hp.ts index 3d7c8f9458d..893bb647283 100644 --- a/test/test-utils/matchers/to-have-full-hp.ts +++ b/test/test-utils/matchers/to-have-full-hp.ts @@ -12,7 +12,7 @@ import type { MatcherState, SyncExpectationResult } from "@vitest/expect"; export function toHaveFullHp(this: MatcherState, received: unknown): SyncExpectationResult { if (!isPokemonInstance(received)) { return { - pass: false, + pass: this.isNot, message: () => `Expected to receive a Pokémon, but got ${receivedStr(received)}!`, }; } diff --git a/test/test-utils/matchers/to-have-hp.ts b/test/test-utils/matchers/to-have-hp.ts index 20d171b23ce..e6463383ac2 100644 --- a/test/test-utils/matchers/to-have-hp.ts +++ b/test/test-utils/matchers/to-have-hp.ts @@ -13,7 +13,7 @@ import type { MatcherState, SyncExpectationResult } from "@vitest/expect"; export function toHaveHp(this: MatcherState, received: unknown, expectedHp: number): SyncExpectationResult { if (!isPokemonInstance(received)) { return { - pass: false, + pass: this.isNot, message: () => `Expected to receive a Pokémon, but got ${receivedStr(received)}!`, }; } diff --git a/test/test-utils/matchers/to-have-positional-tag.ts b/test/test-utils/matchers/to-have-positional-tag.ts new file mode 100644 index 00000000000..448339d6a8d --- /dev/null +++ b/test/test-utils/matchers/to-have-positional-tag.ts @@ -0,0 +1,107 @@ +// biome-ignore-start lint/correctness/noUnusedImports: TSDoc +import type { GameManager } from "#test/test-utils/game-manager"; +// biome-ignore-end lint/correctness/noUnusedImports: TSDoc + +import type { serializedPosTagMap } from "#data/positional-tags/load-positional-tag"; +import type { PositionalTagType } from "#enums/positional-tag-type"; +import type { OneOther } from "#test/@types/test-helpers"; +import { getOnelineDiffStr } from "#test/test-utils/string-utils"; +import { isGameManagerInstance, receivedStr } from "#test/test-utils/test-utils"; +import { toTitleCase } from "#utils/strings"; +import type { MatcherState, SyncExpectationResult } from "@vitest/expect"; + +export type toHavePositionalTagOptions

= OneOther & { + tagType: P; +}; + +/** + * Matcher to check if the {@linkcode Arena} has a certain number of {@linkcode PositionalTag}s active. + * @param received - The object to check. Should be the current {@linkcode GameManager} + * @param expectedTag - The {@linkcode PositionalTagType} of the desired tag, or a partially-filled {@linkcode PositionalTag} + * containing the desired properties + * @param count - The number of tags that should be active; defaults to `1` and must be within the range `[0, 4]` + * @returns The result of the matching + */ +export function toHavePositionalTag

( + this: MatcherState, + received: unknown, + expectedTag: P | toHavePositionalTagOptions

, + count = 1, +): SyncExpectationResult { + if (!isGameManagerInstance(received)) { + return { + pass: this.isNot, + message: () => `Expected to receive a GameManager, but got ${receivedStr(received)}!`, + }; + } + + if (!received.scene?.arena?.positionalTagManager) { + return { + pass: this.isNot, + message: () => + `Expected GameManager.${received.scene?.arena ? "scene.arena.positionalTagManager" : received.scene ? "scene.arena" : "scene"} to be defined!`, + }; + } + + // TODO: Increase limit if triple battles are added + if (count < 0 || count > 4) { + return { + pass: this.isNot, + message: () => `Expected count to be between 0 and 4, but got ${count} instead!`, + }; + } + + const allTags = received.scene.arena.positionalTagManager.tags; + const tagType = typeof expectedTag === "string" ? expectedTag : expectedTag.tagType; + const matchingTags = allTags.filter(t => t.tagType === tagType); + + // If checking exclusively tag type, check solely the number of matching tags on field + if (typeof expectedTag === "string") { + const pass = matchingTags.length === count; + const expectedStr = getPosTagStr(expectedTag); + + return { + pass, + message: () => + pass + ? `Expected the Arena to NOT have ${count} ${expectedStr} active, but it did!` + : `Expected the Arena to have ${count} ${expectedStr} active, but got ${matchingTags.length} instead!`, + expected: expectedTag, + actual: allTags, + }; + } + + // Check for equality with the provided object + if (matchingTags.length === 0) { + return { + pass: false, + message: () => `Expected the Arena to have a tag of type ${expectedTag.tagType}, but it didn't!`, + expected: expectedTag.tagType, + actual: received.scene.arena.tags.map(t => t.tagType), + }; + } + + // Pass if any of the matching tags meet the criteria + const pass = matchingTags.some(tag => + this.equals(tag, expectedTag, [...this.customTesters, this.utils.subsetEquality, this.utils.iterableEquality]), + ); + + const expectedStr = getOnelineDiffStr.call(this, expectedTag); + return { + pass, + message: () => + pass + ? `Expected the Arena to NOT have a tag matching ${expectedStr}, but it did!` + : `Expected the Arena to have a tag matching ${expectedStr}, but it didn't!`, + expected: expectedTag, + actual: matchingTags, + }; +} + +function getPosTagStr(pType: PositionalTagType, count = 1): string { + let ret = toTitleCase(pType) + "Tag"; + if (count > 1) { + ret += "s"; + } + return ret; +} diff --git a/test/test-utils/matchers/to-have-stat-stage.ts b/test/test-utils/matchers/to-have-stat-stage.ts index feecd650bef..a9ae910aece 100644 --- a/test/test-utils/matchers/to-have-stat-stage.ts +++ b/test/test-utils/matchers/to-have-stat-stage.ts @@ -23,14 +23,14 @@ export function toHaveStatStage( ): SyncExpectationResult { if (!isPokemonInstance(received)) { return { - pass: false, + pass: this.isNot, message: () => `Expected to receive a Pokémon, but got ${receivedStr(received)}!`, }; } if (expectedStage < -6 || expectedStage > 6) { return { - pass: false, + pass: this.isNot, message: () => `Expected ${expectedStage} to be within the range [-6, 6]!`, }; } diff --git a/test/test-utils/matchers/to-have-status-effect.ts b/test/test-utils/matchers/to-have-status-effect.ts index a46800632f3..fa5f0346ebd 100644 --- a/test/test-utils/matchers/to-have-status-effect.ts +++ b/test/test-utils/matchers/to-have-status-effect.ts @@ -28,7 +28,7 @@ export function toHaveStatusEffect( ): SyncExpectationResult { if (!isPokemonInstance(received)) { return { - pass: false, + pass: this.isNot, message: () => `Expected to receive a Pokémon, but got ${receivedStr(received)}!`, }; } @@ -37,10 +37,8 @@ export function toHaveStatusEffect( 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 === "object" && actualEffect !== expectedStatus.effect) { + expectedStatus = expectedStatus.effect; } if (typeof expectedStatus === "number") { diff --git a/test/test-utils/matchers/to-have-taken-damage.ts b/test/test-utils/matchers/to-have-taken-damage.ts index 77c60ae836a..55c163a2dc7 100644 --- a/test/test-utils/matchers/to-have-taken-damage.ts +++ b/test/test-utils/matchers/to-have-taken-damage.ts @@ -24,7 +24,7 @@ export function toHaveTakenDamage( ): SyncExpectationResult { if (!isPokemonInstance(received)) { return { - pass: false, + pass: this.isNot, message: () => `Expected to receive a Pokémon, but got ${receivedStr(received)}!`, }; } diff --git a/test/test-utils/matchers/to-have-terrain.ts b/test/test-utils/matchers/to-have-terrain.ts index 292c32abafc..f951abed0b3 100644 --- a/test/test-utils/matchers/to-have-terrain.ts +++ b/test/test-utils/matchers/to-have-terrain.ts @@ -20,15 +20,15 @@ export function toHaveTerrain( ): SyncExpectationResult { if (!isGameManagerInstance(received)) { return { - pass: false, - message: () => `Expected GameManager, but got ${receivedStr(received)}!`, + pass: this.isNot, + message: () => `Expected to receive a GameManager, but got ${receivedStr(received)}!`, }; } if (!received.scene?.arena) { return { - pass: false, - message: () => `Expected GameManager.${received.scene ? "scene" : "scene.arena"} to be defined!`, + pass: this.isNot, + message: () => `Expected GameManager.${received.scene ? "scene.arena" : "scene"} to be defined!`, }; } @@ -41,8 +41,8 @@ export function toHaveTerrain( pass, message: () => pass - ? `Expected Arena to NOT have ${expectedStr} active, but it did!` - : `Expected Arena to have ${expectedStr} active, but got ${actualStr} instead!`, + ? `Expected the Arena to NOT have ${expectedStr} active, but it did!` + : `Expected the Arena to have ${expectedStr} active, but got ${actualStr} instead!`, expected: expectedTerrainType, actual, }; diff --git a/test/test-utils/matchers/to-have-types.ts b/test/test-utils/matchers/to-have-types.ts index 3f16f740583..1c13fc083ae 100644 --- a/test/test-utils/matchers/to-have-types.ts +++ b/test/test-utils/matchers/to-have-types.ts @@ -7,10 +7,16 @@ import { isPokemonInstance, receivedStr } from "../test-utils"; export interface toHaveTypesOptions { /** - * Whether to enforce exact matches (`true`) or superset matches (`false`). - * @defaultValue `true` + * Value dictating the strength of the enforced typing match. + * + * Possible values (in ascending order of strength) are: + * - `"ordered"`: Enforce that the {@linkcode Pokemon}'s types are identical **and in the same order** + * - `"unordered"`: Enforce that the {@linkcode Pokemon}'s types are identical **without checking order** + * - `"superset"`: Enforce that the {@linkcode Pokemon}'s types are **a superset of** the expected types + * (all must be present, but extras can be there) + * @defaultValue `"unordered"` */ - exact?: boolean; + mode?: "ordered" | "unordered" | "superset"; /** * Optional arguments to pass to {@linkcode Pokemon.getTypes}. */ @@ -18,35 +24,54 @@ export interface toHaveTypesOptions { } /** - * 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 + * Matcher that checks if a Pokemon's typing is as expected. + * @param received - The object to check. Should be a {@linkcode Pokemon} + * @param expectedTypes - An array of one or more {@linkcode PokemonType}s to compare against. + * @param mode - The mode to perform the matching in. + * Possible values (in ascending order of strength) are: + * - `"ordered"`: Enforce that the {@linkcode Pokemon}'s types are identical **and in the same order** + * - `"unordered"`: Enforce that the {@linkcode Pokemon}'s types are identical **without checking order** + * - `"superset"`: Enforce that the {@linkcode Pokemon}'s types are **a superset of** the expected types + * (all must be present, but extras can be there) + * + * Default `unordered` + * @param args - Extra arguments passed to {@linkcode Pokemon.getTypes} * @returns The result of the matching */ export function toHaveTypes( this: MatcherState, received: unknown, - expected: [PokemonType, ...PokemonType[]], - options: toHaveTypesOptions = {}, + expectedTypes: [PokemonType, ...PokemonType[]], + { mode = "unordered", args = [] }: toHaveTypesOptions = {}, ): SyncExpectationResult { if (!isPokemonInstance(received)) { return { - pass: false, - message: () => `Expected to recieve a Pokémon, but got ${receivedStr(received)}!`, + pass: this.isNot, + message: () => `Expected to receive a Pokémon, but got ${receivedStr(received)}!`, }; } - const actualTypes = received.getTypes(...(options.args ?? [])).sort(); - const expectedTypes = expected.slice().sort(); + // Return early if no types were passed in + if (expectedTypes.length === 0) { + return { + pass: this.isNot, + message: () => "Expected to receive a non-empty array of PokemonTypes!", + }; + } + + // Avoid sorting the types if strict ordering is desired + const actualSorted = mode === "ordered" ? received.getTypes(...args) : received.getTypes(...args).toSorted(); + const expectedSorted = mode === "ordered" ? expectedTypes : expectedTypes.toSorted(); // 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 matchers = + mode === "superset" + ? [...this.customTesters, this.utils.iterableEquality] + : [...this.customTesters, this.utils.subsetEquality, this.utils.iterableEquality]; + const pass = this.equals(actualSorted, expectedSorted, matchers); - const actualStr = stringifyEnumArray(PokemonType, actualTypes); - const expectedStr = stringifyEnumArray(PokemonType, expectedTypes); + const actualStr = stringifyEnumArray(PokemonType, actualSorted); + const expectedStr = stringifyEnumArray(PokemonType, expectedSorted); const pkmName = getPokemonNameWithAffix(received); return { @@ -55,7 +80,7 @@ export function toHaveTypes( 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, + expected: expectedSorted, + actual: actualSorted, }; } diff --git a/test/test-utils/matchers/to-have-used-move.ts b/test/test-utils/matchers/to-have-used-move.ts index ef90e4dbad9..3697b3e0bc6 100644 --- a/test/test-utils/matchers/to-have-used-move.ts +++ b/test/test-utils/matchers/to-have-used-move.ts @@ -13,7 +13,7 @@ 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, + * @param expectedMove - 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) @@ -22,12 +22,12 @@ import type { MatcherState, SyncExpectationResult } from "@vitest/expect"; export function toHaveUsedMove( this: MatcherState, received: unknown, - expectedResult: MoveId | AtLeastOne, + expectedMove: MoveId | AtLeastOne, index = 0, ): SyncExpectationResult { if (!isPokemonInstance(received)) { return { - pass: false, + pass: this.isNot, message: () => `Expected to receive a Pokémon, but got ${receivedStr(received)}!`, }; } @@ -37,34 +37,33 @@ export function toHaveUsedMove( if (move === undefined) { return { - pass: false, + pass: this.isNot, 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 }; + if (typeof expectedMove === "number") { + expectedMove = { move: expectedMove }; } const moveIndexStr = index === 0 ? "last move" : `${getOrdinal(index)} most recent move`; - const pass = this.equals(move, expectedResult, [ + const pass = this.equals(move, expectedMove, [ ...this.customTesters, this.utils.subsetEquality, this.utils.iterableEquality, ]); - const expectedStr = getOnelineDiffStr.call(this, expectedResult); + const expectedStr = getOnelineDiffStr.call(this, expectedMove); 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, + : `Expected ${pkmName}'s ${moveIndexStr} to match ${expectedStr}, but it didn't!`, + expected: expectedMove, actual: move, }; } diff --git a/test/test-utils/matchers/to-have-used-pp.ts b/test/test-utils/matchers/to-have-used-pp.ts index 3b606a535bc..4815cfcadab 100644 --- a/test/test-utils/matchers/to-have-used-pp.ts +++ b/test/test-utils/matchers/to-have-used-pp.ts @@ -13,7 +13,7 @@ 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 moveId - 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 @@ -23,35 +23,35 @@ import type { MatcherState, SyncExpectationResult } from "@vitest/expect"; export function toHaveUsedPP( this: MatcherState, received: unknown, - expectedMove: MoveId, + moveId: MoveId, ppUsed: number | "all", ): SyncExpectationResult { if (!isPokemonInstance(received)) { return { - pass: false, + pass: this.isNot, message: () => `Expected to receive a Pokémon, but got ${receivedStr(received)}!`, }; } - const override = received.isPlayer() ? Overrides.MOVESET_OVERRIDE : Overrides.OPP_MOVESET_OVERRIDE; + const override = received.isPlayer() ? Overrides.MOVESET_OVERRIDE : Overrides.ENEMY_MOVESET_OVERRIDE; if (coerceArray(override).length > 0) { return { - pass: false, + pass: this.isNot, message: () => `Cannot test for PP consumption with ${received.isPlayer() ? "player" : "enemy"} moveset overrides active!`, }; } const pkmName = getPokemonNameWithAffix(received); - const moveStr = getEnumStr(MoveId, expectedMove); + const moveStr = getEnumStr(MoveId, moveId); - const movesetMoves = received.getMoveset().filter(pm => pm.moveId === expectedMove); + const movesetMoves = received.getMoveset().filter(pm => pm.moveId === moveId); if (movesetMoves.length !== 1) { return { - pass: false, + pass: this.isNot, message: () => `Expected MoveId.${moveStr} to appear in ${pkmName}'s moveset exactly once, but got ${movesetMoves.length} times!`, - expected: expectedMove, + expected: moveId, actual: received.getMoveset(), }; } diff --git a/test/test-utils/matchers/to-have-weather.ts b/test/test-utils/matchers/to-have-weather.ts index 49433b2137b..ffb1e0aad97 100644 --- a/test/test-utils/matchers/to-have-weather.ts +++ b/test/test-utils/matchers/to-have-weather.ts @@ -20,15 +20,15 @@ export function toHaveWeather( ): SyncExpectationResult { if (!isGameManagerInstance(received)) { return { - pass: false, - message: () => `Expected GameManager, but got ${receivedStr(received)}!`, + pass: this.isNot, + message: () => `Expected to receive a GameManager, but got ${receivedStr(received)}!`, }; } if (!received.scene?.arena) { return { - pass: false, - message: () => `Expected GameManager.${received.scene ? "scene" : "scene.arena"} to be defined!`, + pass: this.isNot, + message: () => `Expected GameManager.${received.scene ? "scene.arena" : "scene"} to be defined!`, }; } @@ -41,8 +41,8 @@ export function toHaveWeather( 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 the Arena to NOT have ${expectedStr} weather active, but it did!` + : `Expected the Arena to have ${expectedStr} weather active, but got ${actualStr} instead!`, expected: expectedWeatherType, actual, }; diff --git a/test/test-utils/string-utils.ts b/test/test-utils/string-utils.ts index bd3dd7c2fa9..6c29c04c107 100644 --- a/test/test-utils/string-utils.ts +++ b/test/test-utils/string-utils.ts @@ -34,10 +34,10 @@ interface getEnumStrOptions { * @returns The stringified representation of `val` as dictated by the options. * @example * ```ts - * enum fakeEnum { - * ONE: 1, - * TWO: 2, - * THREE: 3, + * enum testEnum { + * 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)" @@ -174,10 +174,14 @@ export function getStatName(s: Stat): string { * 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 + * @example + * ```ts + * const diff = getOnelineDiffStr.call(this, obj) + * ``` */ 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}"); + .replace(/,(\s*)}$/g, "$1}"); // Trim trailing commas } diff --git a/test/ui/starter-select.test.ts b/test/ui/starter-select.test.ts index a8c6284cf3f..6dc9603c8b3 100644 --- a/test/ui/starter-select.test.ts +++ b/test/ui/starter-select.test.ts @@ -10,7 +10,7 @@ import { EncounterPhase } from "#phases/encounter-phase"; import { SelectStarterPhase } from "#phases/select-starter-phase"; import type { TitlePhase } from "#phases/title-phase"; import { GameManager } from "#test/test-utils/game-manager"; -import type { OptionSelectItem } from "#ui/abstact-option-select-ui-handler"; +import type { OptionSelectItem } from "#ui/abstract-option-select-ui-handler"; import type { OptionSelectUiHandler } from "#ui/option-select-ui-handler"; import type { SaveSlotSelectUiHandler } from "#ui/save-slot-select-ui-handler"; import type { StarterSelectUiHandler } from "#ui/starter-select-ui-handler";